O'Reilly logo

Python für Kids by Gregor Lingl

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

387
Noch ein einfaches Beispiel: Boten
>
Füge in der Parameterliste des Konstruktors einen weiteren Parameter
strich
mit Standardwert 1 an.
>
Füge als letzte Anweisung im Konstruktor einen Aufruf von
self.pensize()
mit dem Parameternamen
strich
als Argument
an.
>
Setze bei den vier
MyTurtle
-Konstruktor-Aufrufen als drittes Argu-
ment
3
ein. Beachte, dass nun
alex
auch ein Farb-Argument
braucht. Wie wär’s zur Abwechslung mit
"pink"
?
>
Entferne den
krot.pensize()
-Aufruf aus der ersten
for
-Schleife.
>
Speichere das Programm und teste es. Wenn es zufrieden stellend
funktioniert, speichere eine Kopie als
dynaspiralen05.py
.
Wir haben jetzt ein schönes Stück Arbeit geleistet und ich bin ziemlich
sicher, dass dir jetzt ganz schön der Kopf raucht. Wir haben die neue Klasse
MyTurtle
von der bestehenden
Turtle
-Klasse abgeleitet. Die Objekte
dieser neuen Klasse werden mit einem »verbesserten« oder leistungsfähige-
ren Konstruktor erzeugt und sie kennen zusätzliche Methoden.
Da steckt viel von den Grundideen der objektorientierten Programmierung
drin. Doch oft ist bei der Durcharbeitung nur eines Beispiels nicht gleich
ersichtlich, was eigentlich das Wesentliche an der Sache ist. Ich möchte
daher hier einen Abschnitt einschieben, in dem noch einmal die Grundkon-
zepte an einem anderen ganz einfachen Beispiel von Anfang an durchpro-
biert werden. Dabei wirst du sogar einige neue Aspekte kennen lernen.
Noch ein einfaches Beispiel:
Boten
Mit diesem Beispiel will ich dir ausschließlich nochmals die Grundbegriffe
des Programmierens von Objekten veranschaulichen. Und zwar von der Pike
auf! Auf den praktischen Nutzen kommt es mir bei diesem Beispiel nicht an.
Dafür ist es so klein, dass wir alles mit dem interaktiven Interpreter machen
können. Trotzdem findest du die Klassen, die in dieser Übung definiert wer-
den, auch auf der Buch-CD in der Datei
boten.py
zum Ausführen, Ausdru-
cken, Durchlesen oder wozu immer.
Boten sind Leute, die eine Botschaft überbringen oder eine Meldung aus-
geben. Wir wollen eine Klasse
Bote
ganz neu definieren, deren Objekte das
tun können.
388
Neue Klassen definieren
Kapitel
14
>
Starte IDLE
(P
YTHON
GUI) und mach mit!
>>> class Bote:
def melde(self):
print("Ich melde dir:", "Hallo!")
Objekte dieser Klasse haben nur sehr bescheidene Fähigkeiten:
>>> herold = Bote()
>>> herold.melde()
Ich melde dir: Hallo!
>>> melder = Bote()
>>> melder.melde()
Ich melde dir: Hallo!
>>>
Die Boten kennen nur eine Methode, etwas zu melden, und melden immer
dasselbe. So kann das nicht bleiben. Sie sollen uns doch eine Botschaft
überbringen. Also verbessern wir die Methode
melde()
:
>>> class Bote:
def melde(self, text):
print("Ich melde dir:", text)
>>> herold = Bote()
>>> herold.melde("Feuer am Dach!")
Ich melde dir: Feuer am Dach!
>>> herold.melde("Hurrikan im Anzug!")
Ich melde dir: Hurrikan im Anzug!
Das ist schon ein Fortschritt. Der Methode
melde()
kann als Argument
übergeben werden, was gemeldet werden soll. Bedauerlich ist allerdings,
dass sich diese Boten nicht merken, was sie melden sollen. Für jede Mel-
dung muss man es ihnen vorsagen. Besser wäre doch, sie könnten einen
Meldungstext – ja! – speichern!
Das Problem dabei ist, dass wir ja aus einer Klasse
Bote
viele Boten-
Objekte machen können oder wollen. Und jedes soll sich seinen eigenen
Meldungstext merken. Das heißt, jedes Objekt (jede Instanz von
Bote
)
braucht seine eigene Variable für den Meldungstext.
>
Das geht, und das macht man so:
>>> class SchlauerBote:
def merke(self, text):
self.botschaft = text
def melde(self):
print("Ich melde dir:", self.botschaft)

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required