Python Mehrfachvererbung, mehrstufige Vererbung und Method Resolution Order (MRO)
Python Mehrfachvererbung
Erkunden Sie, wie Python Mehrfachvererbung unterstützt, die Nuancen mehrstufiger Vererbung und wie die Method Resolution Order (MRO) die Attributsuche steuert.
Python Mehrfachvererbung
Python erlaubt es einer Klasse, von mehr als einer Basisklasse zu erben, genau wie C++. Dieses Feature wird als Mehrfachvererbung bezeichnet und lässt eine abgeleitete Klasse Verhalten mehrerer Elternklassen kombinieren.
Die Syntax spiegelt die einfache Vererbung wider: Sie listen alle Elternklassen in Klammern auf, durch Kommas getrennt.
Beispiel
class Basis1:
pass
class Basis2:
pass
class MultiAbgeleitet(Basis1, Basis2):
pass
In diesem Beispiel erbt MultiAbgeleitet Attribute und Methoden von sowohl Basis1 als auch Basis2.

Diagramm: MultiAbgeleitet erhält Features von Basis1 und Basis2.
Python mehrstufige Vererbung
Über zwei Ebenen hinaus können Sie Vererbung verketten: Eine Klasse erbt von einer abgeleiteten Klasse, was eine mehrstufige Vererbung-Hierarchie schafft. Python unterstützt beliebige Tiefe.
Jede neue abgeleitete Klasse erbt von ihrem unmittelbaren Elternteil, während sie auch die Attribute der Vorfahren weiterträgt.
Beispiel:
class Basis:
pass
class Abgeleitet1(Basis):
pass
class Abgeleitet2(Abgeleitet1):
pass
Hier erweitert Abgeleitet1 Basis, und Abgeleitet2 erweitert Abgeleitet1 weiter, was eine dreistufige Kette bildet.

Method Resolution Order (MRO) in Python
Jede Python-Klasse erbt letztendlich von object, dem universellen Basistyp. Folglich sind alle Objekte Instanzen von object, ob eingebaut oder benutzerdefiniert:
# Ausgabe: True
print(issubclass(list, object))
# Ausgabe: True
print(isinstance(5.5, object))
# Ausgabe: True
print(isinstance("Hallo", object))
Bei Mehrfachvererbung löst Python Attribute mit einer tiefen-first, links-nach-rechts-Durchlauf ohne erneutes Besuchen einer Klasse auf. Diese Durchlaufreihenfolge heißt Method Resolution Order (MRO) und garantiert, dass eine Klasse vor ihren Eltern erscheint.
Die MRO für MultiAbgeleitet ist: [MultiAbgeleitet, Basis1, Basis2, object]. Sie können sie über das __mro__-Attribut oder die mro()-Methode anzeigen:
MultiAbgeleitet.__mro__
# (<class '__main__.MultiAbgeleitet'>, <class '__main__.Basis1'>, <class '__main__.Basis2'>, <class 'object'>)
MultiAbgeleitet.mro()
# [<class '__main__.MultiAbgeleitet'>, <class '__main__.Basis1'>, <class '__main__.Basis2'>, <class 'object'>]
Komplexe Vererbungsgraphen folgen demselben Prinzip. Betrachten Sie dieses Beispiel:

# Demonstration der MRO
class X:
pass
class Y:
pass
class Z:
pass
class A(X, Y):
pass
class B(Y, Z):
pass
class M(B, A, Z):
pass
print(M.mro())
# Ausgabe:
# [<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]
Um tiefer in den Algorithmus einzutauchen, der MRO berechnet, konsultieren Sie die offizielle Python-Dokumentation zu Klassenvererbung und die Diskussion über MRO.
Python
- Python-Datentypen meistern: Praxisleitfaden
- Python-Operatoren meistern: Umfassender Leitfaden
- Python pass-Statement meistern: Praxisleitfaden
- Python-Dictionaries meistern: Erstellung, Manipulation und fortgeschrittene Techniken
- Python benutzerdefinierte Exceptions: Ein praktischer Leitfaden
- Python Objektorientierte Programmierung meistern: Klassen, Vererbung, Kapselung & Polymorphie
- Python Vererbung meistern: Konzepte, Syntax und praktische Beispiele
- type() und isinstance() in Python verstehen: Praktische Beispiele
- C# Vererbung: Wiederverwendbaren & wartbaren Code erstellen
- Python Objektorientierte Programmierung: Umfassender Leitfaden