Heim >Backend-Entwicklung >Python-Tutorial >Wie löst „super()' Methodenaufrufe in der Python-Mehrfachvererbung auf?
Super() in Python-Mehrfachvererbung
Mehrfachvererbung in Python wirft die Frage auf, wie super() damit interagiert. Betrachten Sie den folgenden Code:
class First(object): def __init__(self): print("first") class Second(object): def __init__(self): print("second") class Third(First, Second): def __init__(self): super(Third, self).__init__() print("that's it")
Auf welche übergeordnete Methode von Third bezieht sich super().__init__? Können Sie auswählen, welches ausgeführt wird?
Um super() in diesem Zusammenhang zu verstehen, beschäftigen wir uns mit dem Konzept der Method Resolution Order (MRO). In Python definiert das MRO die Reihenfolge, in der Methoden aufgelöst werden, wenn es um Mehrfachvererbung geht.
In unserem Beispiel ruft Third() First.__init__ auf. Python untersucht jedes Attribut in den Eltern der Klasse von links nach rechts. Für __init__ sucht Python zuerst in „First“, und wenn es dort nicht gefunden wird, prüft es in „Second“.
Mit der ineinandergreifenden Vererbung wird die Situation komplexer. Lesen Sie mehr dazu in Guidos Blogbeitrag zum Thema MRO. Allerdings behält Python im Allgemeinen die Reihenfolge der Vererbung wie geschrieben bei, beginnend mit der untergeordneten Klasse selbst.
Betrachten Sie das folgende Beispiel:
class First(object): def __init__(self): print("first") class Second(First): def __init__(self): print("second") class Third(First): def __init__(self): print("third") class Fourth(Second, Third): def __init__(self): super(Fourth, self).__init__() print("that's it")
Hier wäre das MRO [Vierte, Zweite , Dritter, Erstens].
Es ist wichtig zu beachten, dass Python eine Ausnahme auslöst, wenn es kein kohärentes MRO ermitteln kann, anstatt auf potenziell unerwartete Maßnahmen zurückzugreifen Verhalten.
Darüber hinaus ist es erwähnenswert, dass die bereitgestellten Beispiele keine super()-Aufrufe verwenden. Ihr Zweck besteht darin, zu demonstrieren, wie das MRO aufgebaut ist, und nicht darin, bestimmte Ausgaben zu drucken. Wir empfehlen Ihnen, mit super()-Aufrufen zu experimentieren, um ein tieferes Verständnis des Python-Vererbungsmodells zu erlangen.
Das obige ist der detaillierte Inhalt vonWie löst „super()' Methodenaufrufe in der Python-Mehrfachvererbung auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!