Python Multiple Inheritance: Was ist das und wie wird es verwendet?

In diesem Tutorial erfahren Sie mehr über die Mehrfachvererbung in Python und deren Verwendung in Ihrem Programm. Außerdem erfahren Sie mehr über die mehrstufige Vererbung und die Reihenfolge der Methodenauflösung.

Python-Mehrfachvererbung

Eine Klasse kann ähnlich wie C ++ von mehr als einer Basisklasse in Python abgeleitet werden. Dies wird als Mehrfachvererbung bezeichnet.

Bei der Mehrfachvererbung werden die Merkmale aller Basisklassen in die abgeleitete Klasse vererbt. Die Syntax für die Mehrfachvererbung ähnelt der Einzelvererbung.

Beispiel

 class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass

Hier wird die MultiDerived-Klasse von den Klassen Base1 und Base2 abgeleitet.

Mehrfachvererbung in Python

Die MultiDerived-Klasse erbt sowohl von Base1- als auch von Base2-Klassen.

Python Multilevel Inheritance

Wir können auch von einer abgeleiteten Klasse erben. Dies wird als mehrstufige Vererbung bezeichnet. Es kann in Python von beliebiger Tiefe sein.

Bei der mehrstufigen Vererbung werden Features der Basisklasse und der abgeleiteten Klasse in die neue abgeleitete Klasse geerbt.

Ein Beispiel mit entsprechender Visualisierung ist unten angegeben.

 class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass

Hier wird die Derived1-Klasse von der Base-Klasse und die Derived2-Klasse von der Derived1-Klasse abgeleitet.

Mehrstufige Vererbung in Python

Reihenfolge der Methodenauflösung in Python

Jede Klasse in Python wird von der objectKlasse abgeleitet. Es ist der Basistyp in Python.

Technisch gesehen sind alle anderen Klassen, entweder integriert oder benutzerdefiniert, abgeleitete Klassen, und alle Objekte sind Instanzen der objectKlasse.

 # Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))

Im Mehrfachvererbungsszenario wird jedes angegebene Attribut zuerst in der aktuellen Klasse durchsucht. Wenn sie nicht gefunden werden, wird die Suche in übergeordneten Klassen in der Tiefe zuerst links und rechts fortgesetzt, ohne dass dieselbe Klasse zweimal durchsucht wird.

Also, in dem obigen Beispiel der MultiDerivedKlasse der Suchreihenfolge ist ( MultiDerived, Base1, Base2, object). Diese Reihenfolge wird auch als Linearisierung der MultiDerivedKlasse bezeichnet, und die zum Auffinden dieser Reihenfolge verwendeten Regeln werden als Method Resolution Order (MRO) bezeichnet .

MRO muss die lokale Rangfolge verhindern und auch Monotonie bieten. Es stellt sicher, dass eine Klasse immer vor ihren Eltern erscheint. Bei mehreren Elternteilen entspricht die Reihenfolge den Tupeln der Basisklassen.

MRO einer Klasse kann als __mro__Attribut oder mro()Methode angesehen werden. Ersteres gibt ein Tupel zurück, während letzteres eine Liste zurückgibt.

 >>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )

Hier ist ein etwas komplexeres Beispiel für die Mehrfachvererbung und deren Visualisierung zusammen mit der MRO.

Visualisierung der Mehrfachvererbung in Python
 # Demonstration of 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 # Output: # (, , # , , # , , # ) print(M.mro())

Ausgabe

 (,,,,,,)

Informationen zum tatsächlichen Algorithmus für die Berechnung der MRO finden Sie unter Diskussion zur MRO.

Interessante Beiträge...