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

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.

Python Mehrfachvererbung, mehrstufige Vererbung und Method Resolution Order (MRO)

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.

Python Mehrfachvererbung, mehrstufige Vererbung und Method Resolution Order (MRO)

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:

Python Mehrfachvererbung, mehrstufige Vererbung und Method Resolution Order (MRO)
# 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

  1. Python-Datentypen meistern: Praxisleitfaden
  2. Python-Operatoren meistern: Umfassender Leitfaden
  3. Python pass-Statement meistern: Praxisleitfaden
  4. Python-Dictionaries meistern: Erstellung, Manipulation und fortgeschrittene Techniken
  5. Python benutzerdefinierte Exceptions: Ein praktischer Leitfaden
  6. Python Objektorientierte Programmierung meistern: Klassen, Vererbung, Kapselung & Polymorphie
  7. Python Vererbung meistern: Konzepte, Syntax und praktische Beispiele
  8. type() und isinstance() in Python verstehen: Praktische Beispiele
  9. C# Vererbung: Wiederverwendbaren & wartbaren Code erstellen
  10. Python Objektorientierte Programmierung: Umfassender Leitfaden