Heim  >  Artikel  >  Backend-Entwicklung  >  Wie unterscheidet sich die Method Resolution Order (MRO) in den New-Style-Klassen von Python?

Wie unterscheidet sich die Method Resolution Order (MRO) in den New-Style-Klassen von Python?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 04:38:02425Durchsuche

How Does Method Resolution Order (MRO) Differ in Python's New-Style Classes?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn