20% Rabatt mit Code ERSTIS26
5 min Lesezeit 26. Juli 2026

Python super() verstehen: Vererbung richtig nutzen

super() ist die Python-Funktion für Vererbung: Greife einfach auf Methoden der Elternklasse zu. Perfekt für IT-Azubis, Studenten & Einsteiger!

Marcel Schmidtpeter Von Marcel Schmidtpeter 26. Juli 2026
Python super() verstehen: Vererbung richtig nutzen

Stell dir vor, du baust ein Python-Projekt für deine Abschlussarbeit oder deine Umschulung. Du hast bereits eine Klasse `Fahrzeug`, die grundlegende Eigenschaften wie Geschwindigkeit und Farbe verwaltet. Jetzt sollst du eine Klasse `Auto` erstellen, die alle Eigenschaften von `Fahrzeug` erbt - aber zusätzlich eine Anzahl an Rädern braucht. Ohne die Funktionalität der Elternklasse neu zu schreiben, nutzt du Python super. Genau das ist die Kernaufgabe dieser mächtigen Funktion.

Was ist Python super()?

`super()` ist eine eingebaute Python-Funktion, die dir den Zugriff auf Methoden der Elternklasse (auch Superklasse oder Basisklasse genannt) ermöglicht. Die Elternklasse ist die Klasse, von der deine aktuelle Klasse Eigenschaften und Methoden erbt. Stell dir `super()` wie eine Fernbedienung vor, mit der du direkt auf den "Vater" oder die "Mutter" deiner Klasse zugreifst.

Warum ist das nützlich? Weil du so Code wiederverwenden kannst, ohne ihn zu duplizieren. Du erweiterst quasi vorhandene Logik, anstatt alles neu zu erfinden.

Merke: `super()` gibt dir ein Proxy-Objekt (ein Stellvertreter-Objekt) zurück, das Methoden der Elternklasse an die Kindklasse weiterreicht.

Wie funktioniert Vererbung in Python?

Vererbung bedeutet, dass eine Klasse (die Kindklasse) alle Attribute und Methoden einer anderen Klasse (der Elternklasse) übernimmt. Das ist wie in der Genetik: Du erbst Eigenschaften von deinen Eltern, entwickelst aber auch deine eigenen.

Hier ein einfaches Beispiel:

python
class Tier:
    def __init__(self, name):
        self.name = name

    def macheGeraeusch(self):
        print(f"{self.name} macht ein Geraeusch.")


class Hund(Tier):  # Hund erbt von Tier
    def holeBall(self):
        print(f"{self.name} holt den Ball!")

Die Klasse `Hund` hat nun automatisch Zugriff auf `macheGeraeusch()`. Du kannst also einen Hund erstellen und die Methode aufrufen, ohne sie in `Hund` neu zu definieren:

python
rex = Hund("Rex")
rex.macheGeraeusch()  # Rex macht ein Geraeusch.
rex.holeBall()  # Rex holt den Ball!

Wenn du noch unsicher mit Klassen und dem `self`-Parameter bist, schau dir zuerst die offizielle Python-Dokumentation zu Klassen an.

Wann nutzt man Python super? Der `__init__`-Fall

Die häufigste Situation für `super()` ist der Konstruktor deiner Klasse. Der Konstruktor ist die spezielle Methode `__init__` (gesprochen: "dunder init"), die beim Erstellen eines Objekts aufgerufen wird und die Anfangswerte setzt.

Ohne `super()` würde die `__init__`-Methode der Kindklasse die `__init__`-Methode der Elternklasse überschreiben - und alle Initialisierungen der Elternklasse wären verloren. Genau hier hilft `super()`.

python
class Tier:
    def __init__(self, name):
        self.name = name
        print(f"Tier {self.name} wurde erstellt.")


class Hund(Tier):
    def __init__(self, name, rasse):
        super().__init__(name)  # Ruft __init__ von Tier auf
        self.rasse = rasse
        print(f"Hund {self.name} ({self.rasse}) wurde erstellt.")


bello = Hund("Bello", "Labrador")

Ausgabe:

bash
Tier Bello wurde erstellt.
Hund Bello (Labrador) wurde erstellt.

Durch `super().__init__(name)` stellst du sicher, dass das Attribut `name` korrekt in der Elternklasse `Tier` gesetzt wird. Danach fügst du das kinderspezifische Attribut `rasse` hinzu.

Wichtig: Wenn die Elternklasse Pflicht-Parameter im Konstruktor erwartet, musst du diese über `super().__init__(...)` weitergeben. Sonst fehlen der Instanz wichtige Attribute.

Python super() mit Methoden erweitern

`super()` ist nicht nur auf den Konstruktor beschränkt. Du kannst jede Methode der Elternklasse damit aufrufen. Besonders praktisch wird das, wenn du eine Methode erweitern willst, ohne sie komplett zu überschreiben.

Beispiel: Logging erweitern

Stell dir vor, du hast in deinem Projekt eine Basisklasse für Logger. Die Elternklasse schreibt Nachrichten auf die Konsole. Die Kindklasse soll zusätzlich einen Zeitstempel hinzufügen.

python
import datetime


class BasisLogger:
    def logge(self, nachricht):
        print(f"LOG: {nachricht}")


class ZeitstempelLogger(BasisLogger):
    def logge(self, nachricht):
        zeit = datetime.datetime.now().strftime("%H:%M:%S")
        super().logge(f"[{zeit}] {nachricht}")  # BasisLogger.logge() aufrufen


logger = ZeitstempelLogger()
logger.logge("Server gestartet")
# Ausgabe: LOG: [14:30:15] Server gestartet

Die Kindklasse nutzt die Ausgabe-Logik der Elternklasse, reichert sie aber mit dem Zeitstempel an. Das ist sauberer Code, weil du die eigentliche Log-Ausgabe nur an einer Stelle (in der Elternklasse) pflegen musst.

Praxisbeispiel: Ein einfacher Online-Shop

Schauen wir uns ein vollständiges Beispiel an, das typisch für Prüfungen im Studium oder in der Berufsschule ist. Wir bauen eine einfaches Produkt-Hierarchie für einen Online-Shop.

python
class Produkt:
    def __init__(self, name, preis):
        self.name = name
        self.preis = preis

    def zeigeInfo(self):
        return f"{self.name} - {self.preis:.2f} EUR"

    def berechneSteuern(self):
        return self.preis * 0.19  # 19% MwSt


class Buch(Produkt):
    def __init__(self, name, preis, autor):
        super().__init__(name, preis)  # Name und Preis an Produkt weitergeben
        self.autor = autor

    def zeigeInfo(self):
        basis_info = super().zeigeInfo()  # Info von Produkt holen
        return f"{basis_info} (Autor: {self.autor})"

    def berechneSteuern(self):
        # Buecher haben 7% MwSt, nicht 19%
        return self.preis * 0.07


# Nutzung
mein_buch = Buch("Python fuer Einsteiger", 29.99, "Max Mustermann")
print(mein_buch.zeigeInfo())
# Ausgabe: Python fuer Einsteiger - 29.99 EUR (Autor: Max Mustermann)

print(f"Mehrwertsteuer: {mein_buch.berechneSteuern():.2f} EUR")
# Ausgabe: Mehrwertsteuer: 2.10 EUR

In diesem Beispiel nutzt du `super()` auf zwei Arten:

  1. Im Konstruktor: Um `name` und `preis` an die Elternklasse weiterzugeben.

  2. In der Methode: Um die ursprüngliche Info-Ausgabe zu holen und zu erweitern.

Häufige Fehler mit Python super()

Fehler 1: Parameter vergessen

Ein Klassiker: Du rufst `super().__init__()` ohne Parameter auf, obwohl die Elternklasse welche erwartet.

Falsch:

python
class Tier:
    def __init__(self, name):
        self.name = name


class Hund(Tier):
    def __init__(self, rasse):
        super().__init__()  # FEHLER! Tier braucht 'name'
        self.rasse = rasse

Richtig:

python
class Hund(Tier):
    def __init__(self, name, rasse):
        super().__init__(name)  # Korrekt!
        self.rasse = rasse

Fehler 2: super() außerhalb von Methoden

`super()` funktioniert nur innerhalb einer Instanzmethode (einer Methode, die `self` als ersten Parameter hat). Außerhalb einer Klasse oder in einer statischen Methode wirft es einen Fehler.

Fehler 3: self als Parameter übergeben

Manche Anfänger übergeben versehentlich `self` an die Elternmethode. Das ist nicht nötig, weil `super()` bereits weiß, um welche Instanz es geht.

Falsch:

python
super().__init__(self, name)  # FEHLER! self wird doppelt uebergeben

Richtig:

python
super().__init__(name)  # Korrekt, self ist implizit

Python super() vs. direkter Elternklassen-Aufruf: Was ist besser?

Du könntest theoretisch auch direkt den Namen der Elternklasse verwenden, anstatt `super()`. Das funktioniert, ist aber nicht empfehlenswert.

Kriterium

`super()`

Direkter Aufruf `Elternklasse.methode()`

Flexibilität

Hoch - funktioniert automatisch bei Namensänderungen

Niedrig - Name muss hartcodiert sein

Mehrfachvererbung

Ja, essentiell dafür

Nein, verursacht Probleme

Lesbarkeit

Kurz und aussagekräftig

Länger, expliziter

Empfehlung

Ja, in modernem Python-Code

Nur in Ausnahmefällen

Merke: Nutze immer `super()`, es sei denn, du hast einen sehr spezifischen Grund, die Elternklasse direkt zu referenzieren - zum Beispiel wenn du explizit eine Methode einer ganz bestimmten Klasse umgehen willst.

Wie funktioniert super() bei Mehrfachvererbung? Die MRO

Python unterstützt Mehrfachvererbung - eine Klasse kann von mehreren Elternklassen erben. Das ist mächtig, kann aber komplex werden. Wenn mehrere Elternklassen dieselbe Methode haben, nutzt Python die Method Resolution Order (MRO, auf Deutsch: Methoden-Auflösungsreihenfolge).

Die MRO legt fest, in welcher Reihenfolge Python nach Methoden sucht. Du kannst sie dir mit `ClassName.mro()` anzeigen lassen.

python
class A:
    def hallo(self):
        print("Hallo von A")


class B(A):
    def hallo(self):
        print("Hallo von B")
        super().hallo()


class C(A):
    def hallo(self):
        print("Hallo von C")
        super().hallo()


class D(B, C):
    def hallo(self):
        print("Hallo von D")
        super().hallo()


d = D()
d.hallo()
print(D.mro())

Ausgabe:

bash
Hallo von D
Hallo von B
Hallo von C
Hallo von A
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

Die Reihenfolge ist: D → B → C → A → object. `super()` respektiert diese Reihenfolge automatisch. Genau deshalb ist `super()` so wichtig bei Mehrfachvererbung - es stellt sicher, dass jede Klasse in der Hierarchie genau einmal durchlaufen wird.

Hinweis: Mehrfachvererbung wird in der Praxis (und in vielen Unternehmen) eher vermieden, weil sie schnell unübersichtlich wird. Wenn du sie nutzt, solltest du die MRO unbedingt verstehen.

Übungstipp: Bau dein eigenes Tier-Minispiel

Um das Gelernte zu festigen, baue ein kleines System mit drei Klassen:

  1. `Lebewesen` mit `__init__(self, name)` und der Methode `atmen()`.

  2. `Saeugetier(Lebewesen)` mit `__init__(self, name, fellfarbe)` und der Methode `trinken()`.

  3. `Katze(Saeugetier)` mit `__init__(self, name, fellfarbe)` und der Methode `miauen()`.

Nutze in jeder Kindklasse `super().__init__(...)`, um die Elternklassen korrekt zu initialisieren. Erstelle dann eine Katze und rufe alle drei Methoden (`atmen`, `trinken`, `miauen`) auf.

Falls du dabei festhängst oder generell Hilfe bei Python brauchst, buche dir eine Nachhilfe bei study-it.education.

FAQ: Häufige Fragen zu Python super()

Kann ich super() in statischen Methoden nutzen?

Nein. `super()` benötigt eine Instanz (`self`) und funktioniert nur in regulären Instanzmethoden, nicht in `@staticmethod` oder `@classmethod`.

Was ist der Unterschied zwischen super() und super(Kindklasse, self)?

In Python 3 ist `super()` eine Abkürzung für `super(Kindklasse, self)`. Die kurze Form `super()` wird heute ausschließlich empfohlen, die lange Form ist veraltet.

Was passiert, wenn ich super() vergisst?

Dann wird die Methode der Elternklasse nicht aufgerufen. Beim Konstruktor bedeutet das, dass Attribute der Elternklasse nicht initialisiert werden - was meist zu `AttributeError`-Fehlern führt.

Funktioniert super() auch mit Variablen?

`super()` greift auf Methoden zu, nicht direkt auf Variablen. Da Variablen aber typischerweise im Konstruktor gesetzt werden, greifst du über `super().__init__()` indirekt auf die Variableninitialisierung zu.

Wo finde ich offizielle Dokumentation zu super()?

Die offizielle Python-Dokumentation erklärt `super()` detailliert. Eine sehr gute, praxisnahe Erklärung bietet auch Real Python.

Fazit

Python super ist ein unverzichtbares Werkzeug, wenn du mit Vererbung in Python arbeitest. Es hält deinen Code DRY (Don't Repeat Yourself), verhindert Redundanz und ist unerlässlich für komplexe Hierarchien und Mehrfachvererbung. Egal ob du in der Berufsschule, im Studium oder im ersten Job bist - wenn du objektorientierte Konzepte wie Überladen und Überschreiben anwendest, wirst du immer wieder auf `super()` stoßen.

Falls du bei OOP-Konzepten, Prüfungsvorbereitung oder Projekten in deiner Ausbildung Hilfe brauchst, melde dich bei uns. Bei study-it.education unterstützen wir IT-Auszubildende, Studenten und Berufseinsteiger mit gezielter Nachhilfe - egal ob Python, Java oder C#.


Erstgespräch · 0 € · 30 min

Brauchst du jemand, der das mit dir durchgeht?

Statt nochmal lesen: 30 min mit einem Senior-Dev.

Kostenloses Erstgespräch buchen →
Über den Autor
Marcel Schmidtpeter
Marcel Schmidtpeter

super() ist die Python-Funktion für Vererbung: Greife einfach auf Methoden der Elternklasse zu. Perfekt für IT-Azubis, Studenten & Einsteiger!

marcel.schmidtpeter@study-it.education →
Weiterlesen

Mehr Lesestoff