Klärung der MRO in neuen Klassen
Im Gegensatz zu alt Klassen im neuen Stil prüfen ihre Basisklassen, um eine Methodenauflösungsreihenfolge (Method Resolution Order, MRO) festzulegen. Diese Reihenfolge bestimmt die Reihenfolge, in der nach Methoden gesucht wird, wenn eine Methode für ein Objekt aufgerufen wird.
Vererbungskonflikte mit MRO lösen
Der Hauptunterschied zwischen MRO in neuen Stil- und Old-Style-Klassen entstehen, wenn dieselbe Vorgängerklasse mehrmals in der Vererbungshierarchie vorkommt. Betrachten Sie beispielsweise den folgenden Diamant-Vererbungsfall:
class Base1(object):
def amethod(self):
print("Base1")
class Base2(Base1):
pass
class Base3(object):
def amethod(self):
print("Base3")
class Derived(Base2, Base3):
pass
MRO im Legacy-Stil:
In Klassen im Legacy-Stil wäre die Auflösungsreihenfolge D - B - A - C - A. Hier beim Aufruf von D .amethod(), die Definition in A wird zuerst gefunden und überschreibt die Definition in C.
MRO im neuen Stil:
Für Klassen im neuen Stil das MRO ist wie folgt:
D.__mro__
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>,
<class '__main__.A'>, <type 'object'>)
Beachten Sie, dass A nach all seinen Unterklassen nur einmal in dieser Reihenfolge vorkommt. Dadurch wird sichergestellt, dass Überschreibungen in Unterklassen, wie etwa die Überschreibung einer Methode durch C, Vorrang haben.
Die Bedeutung von MRO verstehen
Die MRO in Klassen neuen Stils löst Vererbungskonflikte sinnvoll, sodass Überschreibungen ordnungsgemäß funktionieren. Außerdem werden Situationen vermieden, in denen mehrere Definitionen derselben Methode in der Auflösungsreihenfolge erscheinen, was zu mehrdeutigem Verhalten führt. Durch das Verständnis und die effektive Nutzung von MRO können Entwickler robuste und wartbare Vererbungshierarchien in Python entwerfen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3