285
10.3
Objekte (Instanzen)
liste im Kopf der Methode enthält drei Argumente. Das erste Argument self darf bei keiner
Methodendefinition fehlen. Es bezeichnet das konkrete Objekt (die Instanz). Die beiden
anderen Argumente sind Anfangswerte für die Attribute
waehrung und betrag. Es ist eine
Hauptaufgabe der Konstruktormethode, die Objektattribute mit Anfangswerten zu belegen.
Dabei verwendet man Zuweisungen des folgenden allgemeinen Formats:
Die Methode
__init__() darf keine return-Anweisung enthalten.
#4: Beim Zugriff auf Attribute der Instanz wird zuerst der Instanzname self, dann ein
Punkt und dann der Name des Attributs aufgeschrieben. Mithilfe des Objektattributs
self.betrag und des Klassenattributs self.wechselkurs wird der Betrag in Euro berech-
net und zurückgegeben.
#5: Die Methode add() verwendet zwei Argumente: Das erste Argument self bezeichnet
wiederum die Instanz,
geld (kleiner Anfangsbuchstabe!) bezeichnet ein Objekt der Klasse
Geld. Die Methode arbeitet im Prinzip folgendermaßen:
Zunächst werden die Geldwerte in Euro des eigenen Objektes self und des übergebe-
nen Objektes addiert. Die Summe wird der Variablen
summe_in_Euro zugewiesen.
In der folgenden Zeile wird ein neues Geld-Objekt namens summe instanziiert. Es erhält
als Wert für das Attribut
betrag die Summe in Euro, umgerechnet in die Währung der
Instanz
self. Die Währung ist die gleiche wie bei der Instanz self. Dieses neue Objekt
wird in der
return-Anweisung an den Sender der Botschaft zurückgegeben.
In der Definition der Methoden können Sie erkennen, wie man auf Attribute zugreift: Man
schreibt zuerst den Namen des Objektes, dann einen Punkt und dann den Namen des Attri-
buts. Format:
Beispiele:
self.betrag bezeichnet das Attribut betrag der eigenen Instanz.
geld.waehrung bezeichnet das Attribut waehrung des Objektes geld.
10.3 Objekte (Instanzen)
Um ein Objekt zu erzeugen, muss man die Klasse aufrufen. Klassen zählen in der Python-
Typhierarchie – wie Funktionen – zu den aufrufbaren Objekten. Als Argumente übergibt
man die in der Parameterliste der Methode
__init__() geforderten Parameter, lässt aber
das erste Argument weg. Der Aufruf der Klasse wird vom System in einen Aufruf der Kon-
struktormethode
__init__() umgewandelt.
Eine Instanz der Klasse
Geld erzeugt man z.B. durch folgende Anweisung:
self.attribut = attribut
objektname.attributname
>>> banknote = Geld('USD', 100)
Kapitel 10
Definition eigener Klassen
286
Wenn Sie die Klasse Geld auf Ihrem Computer ausprobieren wollen, gehen Sie zunächst
folgendermaßen vor. (Im nächsten Kapitel lernen Sie noch bessere Methoden, Klassen zu
testen.)
Erstellen Sie mit Ihrer Entwicklungsumgebung (z.B. IDLE) eine Skriptdatei (IDLE: FILE|
NEW WINDOW), geben Sie die Klassendefinition ein und speichern Sie das Skript in
Ihrem Projektverzeichnis z.B. unter dem Namen
geld.py ab.
Mit IDLE können Sie das Skript mit der Klasse auf Syntaxfehler testen. Klicken Sie dazu
im Menü E
DIT auf das Feld CHECK MODULE. Bei einem Syntaxfehler liefert das System
eine Fehlermeldung und markiert die fehlerhafte Zeile. Leider werden auf diese Weise
nicht alle Fehler entdeckt.
Führen Sie das Skript aus (IDLE: Im Menü RUN das Feld RUN MODULE anklicken). Bei
IDLE öffnet sich ein interaktives Shell-Fenster – sofern es nicht schon vorher geöffnet
war.
In diesem Fenster können Sie Objekte der Klasse Geld instanziieren und testen. Die
Klasse
Geld ist (dadurch, dass Sie das Skript gestartet hatten) dem Laufzeitsystem
bekannt. Falls noch Fehler auftreten (Laufzeitfehler), kann im Editor-Fenster das Skript
verbessert werden. Damit die neue Version im interaktiven Fenster zur Geltung kommt,
müssen Sie das Skript mit der Klassendefinition erneut starten.
Abb. 10.3: Testen einer Klasse im interaktiven Modus (Windows)
287
10.3
Objekte (Instanzen)
Generieren wir nun einige Geld-Objekte und überprüfen die Wirkung der Methode add():
Ein Objekt befindet sich zu jedem Zeitpunkt seiner Existenz in einem definierten Zustand.
Der Zustand ergibt sich aus den momentanen Werten der Attribute. Wie man in der obigen
Beispielsitzung sieht, hängt der Zustand des Objektes
summe davon ab, an welches Objekt
(
hotelrechnung oder mietwagen) die Botschaft add() gesendet worden ist.
Mithilfe von UML-Objektsymbolen kann man den aktuellen Zustand von Objekten visuali-
sieren (Abbildung 10.4). Das oberste Feld im Objektsymbol enthält den Namen des Objektes
und die Klasse im Format:
Objekt:Klasse und ist unterstrichen. Darunter werden die
Namen der Attribute und ihre (momentanen) Werte aufgeführt.
Abb. 10.4: UML-Objektsymbole geben den Zustand von Objekten wieder.
Die Funktion type() liefert zu einem Objekt die Bezeichnung der Klasse:
Es ist auch möglich, Objekte ohne Namen zu generieren. Man nennt sie anonyme Objekte.
Im folgenden Beispiel wird die Methode
add() des Geld-Objektes ausgaben aufgerufen
(
#1) und ein anonymes Geld-Objekt als Argument übergeben:
Abbildung 10.5 zeigt das UML-Objektsymbol des anonymen Objektes.
>>> hotelrechnung = Geld('USD', 123.45)
>>> mietwagen = Geld('EUR', 527.30)
>>> summe = hotelrechnung.add(mietwagen)
>>> print(summe.waehrung, summe.betrag)
USD 743.817538059719
>>> summe = mietwagen.add(hotelrechnung)
>>> print(summe.waehrung, summe.betrag)
EUR 632.230031
>>> type (hotelrechnung)
<class '__main__.Geld'>
>>> ausgaben = Geld('EUR', 0)
>>> ausgaben = ausgaben.add(Geld('USD', 200)) #1
>>> print(ausgaben.betrag, ausgaben.waehrung)
169.996 EUR
mietwagen:Geld
betrag = 527.30
waehrung = 'EUR'
hotelrechnung:Geld
betrag = 123.45
waehrung = 'USD'
summe:Geld
betrag = 632.230031
waehrung = 'EUR'

Get Python 3 - Lernen und professionell anwenden 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.