Vererbung
Eine Superklasse Auto vererbt an die Subklasse BMW . DieseSubklassen hat Zugriff auf alle Methoden und Variablen der Superklasse Auto. Gehen wir nun davon aus, dass wir eine Methode in unserer Auto Superklasse haben, die reparieren() heißt. Und diese Methode soll einfach etwas in die Konsole schreiben, dann können wir diese Methode durch Objekte vom Typen BMW und Audi verwenden.
Damit eine (Sub)Klasse von einer anderen (Super)Klasse erbt, muss man ihr SuperklassenName.__init__(self, param1, param2) hinzufügen. Dabei stehen param1 und param2 für Parameter die man hinzufügen kann, sofern man diese braucht. Es geht auch ohne, wenn die Superklasse keine hat. Außerdem muss man das Objekt der Superklasse in der ersten Zeile der Unterklasse mitgeben.
- Superklasse vererbt an Subklasse
- Subklasse erbt von Superklasse
Beispiel für Vererbung in Python
class Auto(object):
def __init__(self):
print "Auto produziert"
def wasBinIch(self):
print "Auto"
def fahren(self):
print "Fahre"
def reparieren(self):
print "Auto wird repariert"
# Erzeugen eine Subklasse BMW die von Auto erbt
class BMW(Auto):
def __init__(self):
Auto.__init__(self)
print "BMW produziert"
# Legen ein Objekt von BMW an und rufen die Funktion reparieren auf
M5 = BMW()
M5.reparieren()
Auto produziert
BMW produziert
Auto wird repariert
Obwohl die BMW Klasse nun gar keine reparieren Funktion hat, können wir sie dennoch aufrufen. Denn die BMW Klasse hat sie von der Auto Klasse GEERBT.
Funktionen der Superklasse überschreiben in Python
Man kann Funktionen der Superklasse aber auch überschreiben. Das tut man, in dem man einfach die gleiche Funktion in der Subklasse anlegt.
class Auto(object):
def __init__(self):
print "Auto produziert"
def wasBinIch(self):
print "Auto"
def fahren(self):
print "Fahre"
def reparieren(self):
print "Auto wird repariert"
class BMW(Auto):
def __init__(self):
Auto.__init__(self)
print "BMW produziert"
# überschreiben die wasBinIch Funktion der Superklasse
def wasBinIch(self):
print "BMW"
M5 = BMW()
M5.wasBinIch()
Auto produziert
BMW produziert
BMW
Subklassen können aber auch ganz eigene Methoden haben. Von diesen Weiß die Superklasse nichts.
class Auto(object):
def __init__(self):
print "Auto produziert"
def wasBinIch(self):
print "Auto"
def fahren(self):
print "Fahre"
def reparieren(self):
print "Auto wird repariert"
class BMW(Auto):
def __init__(self):
Auto.__init__(self)
print "BMW produziert"
def wasBinIch(self):
print "BMW"
# Subklassen Methode - gibt es in der Superklasse nicht
def bmwSachenMachen(self):
print "immer überholen"
M5 = BMW()
M5.wasBinIch()
M5.bmwSachenMachen()
Auto produziert
BMW produziert
BMW
immer überholen
Natürlich können die Methoden noch viel mehr machen als nur etwas ausgeben. 🙂
Im nächsten Kapitel lernst Du einige der in Python eingebauten Methoden kennen.
Vererbung kann kompliziert sein. Doch einmal begriffen, ist das Thema garnicht so schwer. Oder doch? Teste deine Skills 😉 |