super verwenden
Problem
Du willst das Basis-__init__ und extra Attribute.
Lösung mit super
class Tier:
def __init__(self, name):
self.name = name
class Hund(Tier):
def __init__(self, name, rasse):
super().__init__(name)
self.rasse = rasse
def status(self):
print(f"{self.name} ({self.rasse})")
h = Hund("Bello", "Mischling")
h.status()
super().__init__(name) ruft den Konstruktor der Basisklasse auf.
Auch bei anderen Methoden
class Tier:
def info(self):
return self.name
class Hund(Tier):
def info(self):
return super().info() + " der Hund"
Rate mal!
Was passiert ohne super in Hundes init, wenn du name brauchst?
Auflösung
Du müsstest name selbst setzen oder verlierst die Basis-Logik.
Probiere es selbst
Experiment 1
super in init.
Experiment 2
Extra Attribut in Unterklasse.
Experiment 3
info erweitern mit super.
Fehlerdetektiv
class Hund(Tier):
def __init__(self, name, rasse):
self.rasse = rasse
name fehlt am Objekt, wenn Basis nicht aufgerufen wird.
Übungen
Level 1
super init demo.
Level 2
Unterklasse mit 2 Extra-Attributen.
Level 3
status der Basis erweitern.
Level-1-Lösung
class A:
def __init__(self, x):
self.x = x
class B(A):
def __init__(self, x, y):
super().__init__(x)
self.y = y
print(B(1, 2).x, B(1, 2).y)
Mini-Quiz
super sitzt! Mini-Projekt: Tierheim.