Mehrfachvererbung
Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 20 von 64.
Mehrfache Vererbung ermöglicht es einer Klasse, von mehr als einer Basisklasse zu erben, wodurch Funktionalitäten aus verschiedenen Quellen kombiniert werden.
Hier sind zwei Basisklassen:
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Flyable:
def fly(self):
return f"{self.name} is flying"Erstellen Sie eine Kindklasse, die von beiden Elternklassen erbt:
class Bird(Animal, Flyable):
def __init__(self, name, species):
super().__init__(name) # Ruft __init__ von Animal auf
self.species = species
def sing(self):
return f"{self.name} is singing"Die Syntax class Bird(Animal, Flyable): bedeutet, dass Bird sowohl von Animal als auch von Flyable erbt.
Erstellen Sie ein Vogel-Objekt und verwenden Sie Methoden von beiden Elternteilen:
sparrow = Bird("Sparrow", "House sparrow")Methoden der ersten Elternklasse aufrufen:
print(sparrow.eat())Methoden der zweiten Elternklasse aufrufen:
print(sparrow.fly())Rufe die eigene Methode des Vogels auf:
print(sparrow.sing())Ausgabe:
Sparrow is eating
Sparrow is flying
Sparrow is singingSie können die Vererbungsreihenfolge überprüfen:
print(Bird.__mro__) # Reihenfolge der MethodenauflösungDies zeigt, welche Elternklasse zuerst geprüft wird, wenn nach Methoden gesucht wird.
Wichtiger Punkt: Mehrfache Vererbung verwendet die Syntax class Child(Parent1, Parent2):. Die Kindklasse erhält alle Methoden von allen Elternklassen. Python prüft die Elternklassen von links nach rechts, wenn nach Methoden gesucht wird.
Aufgabe
MittelIn dieser Herausforderung implementieren Sie ein Klassensystem über mehrere Dateien hinweg, das Mehrfachvererbung mit Smartphones demonstriert. Jede Klasse ist zur besseren Code-Organisation in einer eigenen Datei organisiert.
Sie müssen diese Dateien bearbeiten:
device.py- Implementieren Sie die BasisklasseDeviceinternet.py- Implementieren Sie die BasisklasseInternetsmartphone.py- Implementieren Sie die KlasseSmartphone, die von beiden Basisklassen erbtdriver.py- Implementieren Sie Testfälle, die überprüfen, ob Ihre Implementierung korrekt funktioniert
Jede Datei enthält detaillierte TODO-Kommentare, die Sie Schritt für Schritt durch die Implementierung führen.
Spickzettel
Mehrfache Vererbung ermöglicht es einer Klasse, von mehr als einer Elternklasse zu erben, unter Verwendung der Syntax class Child(Parent1, Parent2):
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Flyable:
def fly(self):
return f"{self.name} is flying"
class Bird(Animal, Flyable):
def __init__(self, name, species):
super().__init__(name) # Ruft __init__ von Animal auf
self.species = species
def sing(self):
return f"{self.name} is singing"Die Kindklasse erbt alle Methoden von allen Elternklassen:
sparrow = Bird("Sparrow", "House sparrow")
print(sparrow.eat()) # Aus der Klasse Animal
print(sparrow.fly()) # Aus der Klasse Flyable
print(sparrow.sing()) # Birds eigene MethodeÜberprüfen Sie die Method Resolution Order (MRO), um zu sehen, welche Elternklasse zuerst geprüft wird:
print(Bird.__mro__) # Zeigt die VererbungsreihenfolgeProbier es selbst
# TODO: Importiere die Smartphone-Klasse aus smartphone.py
# Erstelle ein Smartphone und teste seine Methoden
# TODO: Erstelle ein Smartphone-Objekt mit der Marke "Apple" und dem Modell "iPhone 13"
my_phone = None
# TODO: Rufe die Methode power_on() des Smartphones auf und gib sie aus
# TODO: Rufe die Methode connect() des Smartphones auf und gib sie aus
# TODO: Rufe die Methode make_call() des Smartphones mit dem Parameter "123-456-7890" auf und gib sie ausDiese 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