Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

Python-Mehrfachvererbung

Python-Mehrfachvererbung

In diesem Tutorial erfahren Sie mehr über die Mehrfachvererbung in Python und wie Sie sie in Ihrem Programm verwenden. Außerdem erfahren Sie mehr über die Vererbung auf mehreren Ebenen und die Reihenfolge der Methodenauflösung.

Python-Mehrfachvererbung

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

Bei der Mehrfachvererbung werden die Eigenschaften aller Basisklassen in die abgeleitete Klasse vererbt. Die Syntax für Mehrfachvererbung ist ähnlich wie für Einfachvererbung.

Beispiel

class Base1:
    pass

class Base2:
    pass

class MultiDerived(Base1, Base2):
    pass

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

Die MultiDerived Klasse erbt von beiden Base1 und Base2 Klassen.


Python-Vererbung auf mehreren Ebenen

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 Merkmale der Basisklasse und der abgeleiteten Klasse in die neue abgeleitete Klasse vererbt.

Ein Beispiel mit entsprechender Visualisierung finden Sie weiter unten.

class Base:
    pass

class Derived1(Base):
    pass

class Derived2(Derived1):
    pass

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


Reihenfolge der Methodenauflösung in Python

Jede Klasse in Python wird von object abgeleitet Klasse. Es ist der grundlegendste Typ in Python.

Technisch gesehen sind also alle anderen Klassen, entweder eingebaute oder benutzerdefinierte, abgeleitete Klassen und alle Objekte sind Instanzen von object Klasse.

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

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

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

Beim Mehrfachvererbungsszenario wird jedes angegebene Attribut zuerst in der aktuellen Klasse gesucht. Wenn sie nicht gefunden wird, wird die Suche mit der Tiefe zuerst und von links nach rechts in Elternklassen fortgesetzt, ohne dass dieselbe Klasse zweimal durchsucht wird.

Also im obigen Beispiel von MultiDerived Klasse ist die Suchreihenfolge [MultiDerived , Base1 , Base2 , object ]. Diese Ordnung wird auch als Linearisierung von MultiDerived bezeichnet Klasse und der Satz von Regeln, die verwendet werden, um diese Reihenfolge zu finden, wird als Method Resolution Order (MRO) bezeichnet .

MRO muss eine lokale Vorrangordnung verhindern und auch Monotonie bereitstellen. Es stellt sicher, dass eine Klasse immer vor ihren Eltern erscheint. Bei mehreren Eltern ist die Reihenfolge dieselbe wie bei Tupeln von Basisklassen.

MRO einer Klasse kann als __mro__ angesehen werden -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 Mehrfachvererbung und seine Visualisierung zusammen mit dem MRO.

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

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 den tatsächlichen Algorithmus zur Berechnung von MRO zu erfahren, besuchen Sie Diskussion über MRO.


Python

  1. Python-Datentypen
  2. Python-Operatoren
  3. Python-pass-Anweisung
  4. Python-Wörterbuch
  5. Benutzerdefinierte Python-Ausnahmen
  6. Python objektorientierte Programmierung
  7. Python-Vererbung
  8. type() und isinstance() in Python mit Beispielen
  9. C# - Vererbung
  10. Python - Objektorientiert