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 RetrieverVerwenden 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ügenRufen 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.
Aufgabe
MittelIn 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 ageemployee.py: Enthält die Employee-Klasse, die von Person erbtdriver.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 = breedVerwendung 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ügenOhne 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()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
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktor-Methode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDie super()-FunktionMethoden überschreibenMehrfachvererbungMethod Resolution OrderZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden
Einführung in Magic MethodsOperator-ÜberladungMagic Methods für ContainerRückblick - Eigene Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung2Dekoratoren
Einführung in DekoratorenProperty-DekoratorStatischer Methoden-DekoratorKlassenmethoden-Dekorator5Polymorphismus
Methoden-Überschreiben vertieftDuck TypingAbstrakte Klassen und MethodenInterface-DesignZusammenfassung – Formen-Rechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische und KlassenmethodenKlassendekoratorenContext Manager3Klasseneigenschaften
Instanz- vs. KlassenvariablenProperty-DekoratorenPrivate AttributeZusammenfassung – Bankkonto-Manager6Kapselung
Public, Protected, Private MemberZugriffsmodifikatorenInformation HidingProperty-Decorators für FortgeschritteneZusammenfassung - Studentenverwaltungssystem12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen