383
Der Konstruktor
>
Dieses Programm tut genau dasselbe wie unser Ausgangsprogramm
dynaspiralen02.py
. Und dennoch hast du bei seiner Entwicklung
viele neue und wichtige Dinge gelernt:
Um Objekte mit gewünschten Eigenschaften und Fähigkeiten erzeugen
zu können, musst du eine entsprechende Klasse definieren. Von Vorteil
kann es dabei sein, wenn die neue Klasse Unterklasse einer schon vor-
handenen Klasse sein soll. In diesem Kapitel haben wir
MyTurtle
als
Unterklasse von
Turtle
definiert. Umgekehrt nennen wir
Turtle
eine
Oberklasse von
MyTurtle
.
Die Objekte der Unterklasse erben dann alle Fähigkeiten, das heißt alle
Methoden der Oberklasse.
Eine Klassendefinition beginnt mit einer Kopfzeile der Form
class Klassenname(Oberklasse)
:
Dahinter folgt – wie immer bei zusammengesetzten Anweisungen – ein-
gerückt der Körper der Klassendefinition.
In ihm werden zusätzliche Methoden festgelegt. Die Methodendefinitio-
nen müssen folgende Eigenschaften haben:
0
Sie müssen im Körper der Klassendefinition eingerückt stehen.
0
Sie müssen als ersten Parameter einen Namen für das Objekt selbst
haben, für das die Methode aufgerufen wird. Dafür wird immer der
Name
self
verwendet.
0
Methodendefinitionen haben also immer mindestens einen Parame-
ter:
self
!
In der Definition haben die Methoden (scheinbar) einen Parameter mehr
als die Anzahl der Argumente, die beim Aufruf eingesetzt werden. Doch
bei der Ausführung der Methode ist das Objekt, für das die Methode auf-
gerufen wird, das Argument, das für den ersten Parameter eingesetzt
wird. Er steht entsprechend der speziellen Syntax für Methodenaufrufe
durch einen Punkt getrennt vor dem Methodennamen (Punktnotation).
Das war ein guter Anfang zum Thema Programmierung von Klassen. Doch
dazu gibt es noch mehr zu sagen.
Der Konstruktor
Du weißt schon, dass der Konstruktor einer Klasse aufgerufen wird, um ein
Objekt dieser Klasse zu erzeugen. Wir haben aber für
MyTurtle
keinen
384
Neue Klassen definieren
Kapitel
14
Konstruktor programmiert. Muss ein Konstruktor nicht programmiert wer-
den?
In der Regel doch. Der Konstruktor enthält Programmcode, der bei der Er-
zeugung eines Objekts ausgeführt wird. Durch diesen Code können be-
stimmte Eigenschaften des Objekts eingestellt werden oder auch verschie-
dene Effekte bewirkt werden. So hat die Klasse
Turtle
einen program-
mierten Konstruktor, der unter anderem ein Turtle-Grafik-Fenster öffnet,
wenn noch keines vorhanden ist. In diesem Fenster erscheint dann das
Turtle
-Objekt. Das hast du ja stets beobachtet, wenn du mit dem IPI eine
Turtle erzeugt hast. Außerdem werden im Konstruktor allerhand Eigen-
schaften der Turtle festgelegt: wo sie sitzt, wie sie orientiert ist, ihre Farbe,
ihre Strichdicke und so weiter.
Ganz dasselbe geschieht auch, wenn du ein
MyTurtle
-Objekt erzeugst,
obwohl wir keinen Konstruktor für die Klasse
MyTurtle
programmiert
haben. Wie kommt das?
Das kommt so: Wenn eine abgeleitete Klasse keinen Konstruktor hat, dann
wird bei der Konstruktion eines Objekts dieser Klasse automatisch der Kon-
struktor der Oberklasse aufgerufen.
Wenn wir aber wollen, dass bei der Erzeugung eines
MyTurtle
-Objekts
zusätzliche Eigenschaften festgelegt oder zusätzliche Aktionen ausgeführt
werden, dann müssen wir dafür einen eigenen Konstruktor schreiben.
Das wollen wir jetzt tun. Der neue Konstruktor soll ein gleichartiges Objekt
wie der Konstruktor von
Turtle
erzeugen, das aber schon eine bei der
Erzeugung wählbare Stiftfarbe und Orientierung haben kann. Farbe und
Orientierung sollen dem Konstruktor als Argument übergeben werden. Das
heißt, die Anweisung:
fritz = MyTurtle("red", 90)
macht dasselbe wie bisher schon
fritz = MyTurtle()
und
stellt zusätz-
lich die Stiftfarbe von
fritz
auf Rot und die Orientierung auf 90° ein. Wir
werden den Konstruktor so gestalten, dass die Farbe ein Argument mit dem
Standardwert
"black"
ist und die Orientierung ein Argument mit dem
Standardwert
0
.
Der Konstruktor jeder Klasse ist eine »spezielle Methode« mit einem festge-
legten Namen:
__init__
. Dieser Name hat zwei Unterstriche vor und zwei
Unterstriche nach
init
. Wie du schon weißt, gibt es in Python eine ganze
Reihe von Namen für »spezielle Methoden«, die mit diesem »2-mal-2-
Unterstrich-Verfahren« gebildet werden.
Wir arbeiten weiterhin mit unserem kleinen Dynaspiralen-Programm:

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.