275
11
Objekte und Methoden
Seit dem ersten Kapitel ist in diesem Buch immer wieder von Objekten die
Rede. Du weißt auch – mindestens von der Einleitung –, dass Python eine
objektorientierte Programmiersprache ist.
In diesem Kapitel lernst du mehr über Objekte, nämlich ...
$
am Beispiel der Turtle, wie du
Turtle
-Objekte erzeugen kannst.
$
dass
Turtle
-Objekte und Objekte im Allgemeinen Methoden haben.
$
dass du als Programmierer diese Methoden aufrufst, um die Fähigkeiten
der Objekte zu nutzen.
$
… dass es neben Strings und Tupeln noch den Datentyp Liste gibt.
$
… dass diese drei Datentypen Sequenzen sind.
$
… dass davon aber nur Listen veränderbar sind.
$
… über welche Methoden sie verfügen.
276
Objekte und Methoden
Kapitel
11
Sind Turtles Objekte?
An einer früheren Stelle habe ich die Behauptung aufgestellt, dass in
Python »fast alles ein Objekt« ist. Wie steht es in dieser Hinsicht mit unse-
rer Turtle?
An sich verhält sie sich wie ein ausgewachsenes Objekt. Sie hat verschiede-
ne Eigenschaften, wie zum Beispiel die Strichdicke und die Farbe, mit der
sie zeichnet. Diese Eigenschaften kannst du mit passenden Anweisungen –
Funktionsaufrufen wie
pensize()
,
pencolor()
– einstellen. Sie hat auch
einige Fähigkeiten. Sie kann vorwärts und rückwärts laufen, dabei Linien
zeichnen oder auch nicht, und sie kann sich nach rechts oder nach links
drehen. Du bringst sie dazu, das zu tun, indem du Funktionen wie
for-
ward()
,
left()
und so weiter aufrufst.
Und doch ist diese Turtle für uns ein seltsam anonymes Ding: Sie hat kei-
nen Namen. Und wir können sie nicht direkt erzeugen, sondern sie ist mit
der Anweisung
from turtle import *
einfach da. Mit der ersten ei-
gentlichen Turtle-Grafik-Anweisung werden sowohl ihr Spielfeld, das Turt-
le-Grafik-Fenster, wie auch sie selbst sichtbar. (Wenn diese Anweisung
nicht gerade
hideturtle()
ist, die mutwillig die Turtle unsichtbar
macht.)
Wenn ich bis jetzt von Objekten geschrieben habe, waren das Zahlen,
Strings, Listen, Funktionen und so weiter. Das sind Objekte, die zu Datenty-
pen gehören, die in Python fix eingebaut sind.
Objekte vom Typ unserer Turtle sind aber in Python nicht von vornherein
eingebaut. Objekte vom Typ Turtle werden nach einem Bauplan erzeugt,
den ein Programmierer – in dem Fall war das ich – in ein Python-Modul
geschrieben hat, nämlich in das Modul
turtle.py
.
Einen solchen Bauplan, nach dem Objekte erzeugt werden können, nennt
man eine
Klasse
oder manchmal genauer eine
Klassendefinition
.
Vergiss nun einmal die namenlose Turtle, die uns bisher so treue Dienste
geleistet hat, und schau dir an, wie man eine Klasse dazu benutzen kann,
eins, zwei, drei ... viele Objekte zu erzeugen.
Die Klasse, mit der Turtles erzeugt werden können, heißt
Turtle
. Wir wol-
len also jetzt ein paar
Turtle
-Objekte erzeugen und sie dazu bringen zu
zeichnen. Wenn wir mehrere Objekte unterscheiden wollen, müssen wir
ihnen jeweils eigene Namen geben, mit denen wir sie ansprechen.
Um
Turtle
-Objekte erzeugen zu können, musst du nur den Namen der
Klasse, also
Turtle
, aus dem Modul
turtle
importieren.
277
Sind Turtles Objekte?
>
Starte den IPI neu und mach mit!
>>> from turtle import Turtle
>>> alex = Turtle()
>>>
Was haben wir jetzt? Ein
Turtle
-Objekt namens
alex
. Du siehst es im
Turtle-Grafik-Fenster. Möchtest du, dass
alex
50 Einheiten vorwärts läuft?
>>> forward(50)
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
forward(50)
NameError: name 'forward' is not defined
>>>
Schluck! Warum ist jetzt auf einmal der Name
forward
nicht definiert?
Ganz einfach: Wir haben ihn nicht importiert. Nur
Turtle
haben wir im-
portiert! Das hat aber auch seinen tieferen Sinn. Sagen wir mal:
>>> bert = Turtle()
Dann haben wir ein zweites
Turtle
-Objekt: Es heißt
bert
. Leider sieht
man es (noch) nicht. Doch frage ich dich, was sollte
forward(50)
jetzt
bedeuten?
Dass
alex
50 Einheiten vorwärts läuft? Oder doch
bert
? Wenn wir
eine
Botschaft haben,
forward(50)
, aber mehrere mögliche Adressaten, dann
müssen wir wohl auch angeben, an wen die Botschaft gerichtet ist. Also?
Schicken wir die Botschaft an
alex
:
>>> alex.forward(50)
Und schon hat er’s getan! Und jetzt können wir auch
bert
sehen – er und
alex
haben vorher übereinander gesessen. Wird
bert
auch so folgsam
sein?
>>> bert.left(90)
Ja,
bert
reagiert auch. Machen wir ihn rot, damit wir ihn gleich erkennen
können:
>>> bert.color("red")
>>> bert.forward(50)
Machen wir uns rasch noch eine weitere Schildkröte. Das geht genauso wie
oben: Man schreibt den Klassennamen hin,
Turtle
, aber so, als wenn es
ein Funktionsaufruf wäre:
Turtle()
.
>>> carl = Turtle()

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.