next up previous contents index 6163656769
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 up previous contents index 6163656769
Next: 5.3 Noch einmal: Dateien Up: 5. Klassen Previous: 5.1 Attribute, Methoden, Instanzen,   Contents   Index
Heiko Schroeder 2003-03-19