„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie unterscheidet sich die Method Resolution Order (MRO) in Klassen neuen Stils von Klassen älteren Stils und löst Vererbungskonflikte?

Wie unterscheidet sich die Method Resolution Order (MRO) in Klassen neuen Stils von Klassen älteren Stils und löst Vererbungskonflikte?

Veröffentlicht am 15.11.2024
Durchsuche:101

How does Method Resolution Order (MRO) in New-Style Classes differ from Legacy-Style Classes and resolve inheritance conflicts?

Method Resolution Order (MRO) in neuen Klassen

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.

Neuestes Tutorial Mehr>

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