Python Multiple Inheritance

Table of Contents

 

In diesem Lernprogramm lernen Sie die Mehrfachvererbung in Python kennen und erfahren, wie Sie sie in Ihrem Programm verwenden können. Sie erfahren auch etwas über die mehrstufige Inheritance und die Reihenfolge der Methodenauflösung.

 

Python Multiple Inheritance

 

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

Bei der Mehrfach “Inheritance” werden die Eigenschaften aller Basisklassen in die abgeleitete Klasse vererbt. Die Syntax für die Mehrfach “Inheritance” ist ähnlich wie bei der Einfach Inheritance.

 

Beispiel

 

class Base1:
    pass

class Base2:
    pass

class MultiDerived(Base1, Base2):
    pass

 

 

Hier die MultiDerived Klasse ist abgeleitet von Base1 und Base2 Klassen.

Multiple Inheritance in Python
Mehrfache “Inheritance ” in Python

 

Das MultiDerived Klasse erbt von beiden Base1 und Base2 Klassen.

 


 

 

Python Multilevel Inheritance

Wir können auch von einer abgeleiteten Klasse erben. Dies wird als mehrstufige Vererbung bezeichnet. Sie kann in Python beliebig tief sein.

Bei der mehrstufigen Vererbung werden Eigenschaften der Basisklasse und der abgeleiteten Klasse an die neue abgeleitete Klasse vererbt.

Ein Beispiel mit entsprechender Visualisierung finden Sie unten.

 

class Base:
    pass

class Derived1(Base):
    pass

class Derived2(Derived1):
    pass

 

 

Hier die Derived1 Klasse ist abgeleitet von der Base Klasse, und die Derived2 Klasse ist abgeleitet von der Derived1 Klasse.

 

Multilevel Inheritance in Python
Mehrstufige “Inheritance” in Python

 


 

Method Resolution Order in Python

 

Jede Klasse in Python ist abgeleitet von der object Klasse. Sie ist der base Typ in Python.

Technisch gesehen sind also alle anderen Klassen, ob eingebaut oder benutzerdefiniert, abgeleitete Klassen und alle Objekte sind Instanzen der object Klasse.

# Output: True
print(issubclass(list,object))

# Output: True
print(isinstance(5.5,object))

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

 

Im Szenario Mehrfach inheritance wird jedes angegebene Attribut zuerst in der aktuellen Klasse gesucht. Wenn es nicht gefunden wird, wird die Suche in übergeordneten Klassen in der Tiefe zuerst, von links nach rechts fortgesetzt, ohne dieselbe Klasse zweimal zu durchsuchen.

 

Also im obigen Beispiel von MultiDerived Klasse, die Suchreihenfolge ist[MultiDerived, Base1, Base2, object]. Diese Ordnung wird auch Linearisierung von genannt MultiDerived Klasse und das Regelwerk, das verwendet wird, um diese Reihenfolge zu finden, heißt Method Resolution Order (MRO).

 

MSP muss lokale Vorrang verhindern und auch Monotonie sicherstellen. Es sorgt dafür, dass eine Klasse immer vor ihren Eltern erscheint. Wenn es mehrere Eltern gibt, ist die Reihenfolge die gleiche wie bei Tupeln von Basisklassen.

 

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

>>> MultiDerived.__mro__
(<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>)

>>> MultiDerived.mro()
[<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>]

 

Hier ist ein etwas komplexeres Beispiel für mehrfach Inheritance und seine Visualisierung zusammen mit dem MRO.

Visualizing Multiple Inheritance in Python
Visualisierung von Mehrfach Inheritance in Python

 

# Demonstration von 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:
# [<class '__main__.M'>, <class '__main__.B'>,
#  <class '__main__.A'>, <class '__main__.X'>,
#  <class '__main__.Y'>, <class '__main__.Z'>,
#  <class 'object'>]

print(M.mro())

 

 

Output

[<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]

 

Um den aktuellen Algorithmus zur Berechnung der MRO zu erfahren, besuchen Sie Diskussion über MRO.