Zum Hauptinhalt springen

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

Mini-QuizWofuer ist super() da?

super sitzt! Mini-Projekt: Tierheim.