



Next: 5.3 Noch einmal: Dateien
Up: 5. Klassen
Previous: 5.1 Attribute, Methoden, Instanzen,
Contents
Index
5.2 Vererbung
Und jetzt kommt wirklich ein Knaller. Auch ohne, dass wir in den Code
von kfeld eingreifen müssen, können wir uns eine neue Klasse
verschaffen, die nur an denjenigen Stellen anders ist, die man haben
will und ansonsten alles von kfeld erbt. Nennen wir
die neue Klasse nfeld, so wird die Vererbung via
-
- class nfeld(kfeld):
angezeigt. Wird ein Objekt
-
- neu=nfeld()
deklariert, enthält es sämtliche Datensätze, die auch kfeld-Objekte
besitzen. Merhfachvererbung ist ebenfalls möglich, wenn mehrere Objekte
durch Kommata gtrennt in den runden Klammern erscheinen. Nun wollen
wir etwas ändern. Die nfeld-Objekte sollen je nach Angabe statt
Nullen, das Feld mit der vorgegebenen Zahl belegen. Wir müssen den
Konstruktor __init__() daher überschreiben.
Das Ganze sieht jetzt so aus:
-
- class nfeld(kfeld):
def __init__(self,w):
self.data=[[w,w,w,w],[w,w,w,w],[w,w,w,w],[w,w,w,w]]
Jetzt muss bei der Instanzbildung ein Wert übergeben werden, zum Beispiel:
-
- neu=nfeld(2)
Der Zuweisungsoperator = weist, da __init__ ja angibt, dass dies
so zu tun ist (__init__ »überlädt« ja den Operator =), den
Namen self dem Objektnamen neu zu. Damit ist aber erst
ein Parameter zugewiesen. __init__ wartet noch auf einen
zweiten. Dieser muss explizit in den runden Klammern angegeben werden.
Sind (ausser self) noch weitere Paramter erforderlich, geschieht
dies wie bei der gewöhnlichen Tupelübergabe von Funktionen.
So einfach ist das. Die Objekte kommunizieren jetzt nur noch über
ihre Methoden miteinander. Auf gar keinen Fall sollte man direkt auf
den Datensatz feld.data von aussen zugreifen. Es ist
möglich, aber extrem schlechter Programmierstil.




Next: 5.3 Noch einmal: Dateien
Up: 5. Klassen
Previous: 5.1 Attribute, Methoden, Instanzen,
Contents
Index
Heiko Schroeder
2003-03-19