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

Susan Sarandon
Freigeben: 2024-10-30 04:38:02
Original
441 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!