Menu
Coddy logo textTech

Die super()-Funktion

Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 18 von 64.

Die super()-Funktion ermöglicht es einer Child-Klasse, Methoden ihrer Parent-Klasse aufzurufen. Dies erlaubt es Ihnen, die Funktionalität der Parent-Klasse zu erweitern, anstatt sie vollständig zu ersetzen.

Hier ist ein Beispiel für die Verwendung von super() im Konstruktor:

class Animal:
    def __init__(self, name):
        self.name = name
        print(f"Animal created: {name}")

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # Rufe __init__ der Elternklasse auf
        self.breed = breed
        print(f"Dog breed set: {breed}")

Erstelle ein Hund-Objekt:

buddy = Dog("Buddy", "Golden Retriever")
print(f"Name: {buddy.name}, Breed: {buddy.breed}")

Ausgabe:

Animal created: Buddy
Dog breed set: Golden Retriever
Name: Buddy, Breed: Golden Retriever

Verwenden Sie super(), um Methoden der Elternklasse zu erweitern:

class Animal:
    def make_sound(self):
        print("Generic animal sound")

class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # Zuerst die Methode der Elternklasse aufrufen
        print("Woof!")        # Hundespezifisches Verhalten hinzufügen

Rufen Sie die erweiterte Methode auf:

buddy = Dog()
buddy.make_sound()

Ausgabe:

Generic animal sound
Woof!

Ohne super() würden Sie die Funktionalität der Elternklasse verlieren:

class Cat(Animal):
    def make_sound(self):
        print("Meow!")  # Nur Katzenlaut, Elternmethode wird ignoriert

cat = Cat()
cat.make_sound()

Ausgabe:

Meow!

Wichtiger Punkt: Verwenden Sie super(), um Methoden der Elternklasse aus Kindklassen aufzurufen. Dies ermöglicht es Ihnen, die Funktionalität zu erweitern, anstatt sie vollständig zu ersetzen. Häufige Anwendungsfälle sind der Aufruf von __init__-Methoden der Elternklasse und die Erweiterung des Verhaltens der Elternklasse.

challenge icon

Aufgabe

Mittel

In dieser Herausforderung wirst du eine Person- und Employee-Klassenhierarchie unter Verwendung von Vererbung implementieren.

  • person.py: Enthält die Person-Klasse mit den Attributen name und age
  • employee.py: Enthält die Employee-Klasse, die von Person erbt
  • driver.py: Hauptdatei zum Testen deiner Implementierung

Jede Datei enthält detaillierte TODO-Kommentare, die dich durch die Implementierung führen.

Spickzettel

Die Funktion super() ermöglicht es einer untergeordneten Klasse, Methoden ihrer übergeordneten Klasse aufzurufen, wodurch die Funktionalität erweitert statt ersetzt wird.

Verwendung von super() in Konstruktoren:

class Animal:
    def __init__(self, name):
        self.name = name

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # Aufruf der __init__ der Elternklasse
        self.breed = breed

Verwendung von super() zur Erweiterung von Methoden:

class Animal:
    def make_sound(self):
        print("Generic animal sound")

class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # Zuerst die Methode der Elternklasse aufrufen
        print("Woof!")        # Kind-spezifisches Verhalten hinzufügen

Ohne super(): Methoden der untergeordneten Klasse ersetzen die Funktionalität der Elternklasse vollständig, anstatt sie zu erweitern.

Probier es selbst

# TODO: Importiere die Person-Klasse aus person.py
# TODO: Importiere die Employee-Klasse aus employee.py

def main():
    # TODO: Erstelle ein Person-Objekt mit dem Namen "Alice" und dem Alter 30
    person = None
    
    # TODO: Erstelle ein Employee-Objekt mit dem Namen "Bob", dem Alter 35 und dem Beruf "Developer"
    employee = None
    
    # TODO: Rufe die Methode introduce() für das Person-Objekt auf
    # Erwartete Ausgabe: "Hi, I'm Alice and I'm 30 years old"
    
    # TODO: Gib eine Leerzeile zur Abgrenzung aus - print()
    
    # TODO: Rufe die Methode introduce() für das Employee-Objekt auf
    # Erwartete Ausgabe: 
    # "Hi, I'm Bob and I'm 35 years old"
    # "I work as a Developer"

if __name__ == "__main__":
    main()
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Object Oriented Programming