Heim > Artikel > Backend-Entwicklung > Wie unterscheidet sich die Method Resolution Order (MRO) in den New-Style-Klassen von Python?
Method Resolution Order (MRO) in New-Style-Klassen
In Python bestimmt die Method Resolution Order (MRO) die Reihenfolge, in der die Vererbung erfolgt Ketten werden nach Methodenattributen durchsucht. Während die MRO für Klassen alten Stils einem einfachen Tiefenansatz folgt, führen Klassen neuen Stils eine geänderte Reihenfolge ein, die dafür sorgt, dass die Mehrfachvererbung intuitiver funktioniert.
MRO-Unterschied in Klassen neuen Stils
Wenn dieselbe Vorfahrenklasse im naiven Tiefenansatz in Klassen im Legacy-Stil mehrmals vorkommt, hat sie Vorrang vor ihren Unterklassen. Betrachten Sie das folgende Beispiel der „Diamantvererbung“:
<code class="python">class A: x = 'a' class B(A): pass class C(A): x = 'c' class D(B, C): pass</code>
Im Legacy-Stil lautet die Auflösungsreihenfolge für D.x: D – B – A – C – A. Somit verbirgt die Definition von A die Überschreibung in C.
In Klassen neuen Stils stellt das geänderte MRO jedoch sicher, dass Überschreibungen berücksichtigt werden. Der MRO für das obige Beispiel lautet:
<code class="python">D.__mro__ (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)</code>
Hier wird A gezwungen, nach allen seinen Unterklassen nur einmal aufzutreten. Dadurch können Überschreibungen in Unterklassen, wie z. B. die Überschreibung von Mehrfachvererbung. Klassen im Legacy-Stil sind anfällig für Konflikte bei Diamant-Vererbungsmustern. Im Gegensatz dazu handhaben Klassen neuen Stils die Mehrfachvererbung flexibler und ermöglichen, dass Überschreibungen wie erwartet funktionieren.
Daher wird empfohlen, Klassen alten Stils zu vermeiden und stattdessen Klassen neuen Stils zu verwenden. Klassen im neuen Stil stellen sicher, dass die Mehrfachvererbung intuitiv funktioniert und unerwartete Konflikte bei der Methodenauflösung verhindert.
Das obige ist der detaillierte Inhalt vonWie unterscheidet sich die Method Resolution Order (MRO) in den New-Style-Klassen von Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!