Heim >Backend-Entwicklung >Python-Tutorial >Wie löst Pythons „super()' Methodenaufrufe bei Mehrfachvererbung auf?
Wie Mehrfachvererbung das Verhalten von Pythons super() beeinflusst
Mehrfachvererbung in Python führt zu Komplexitäten bei der Methodenauflösung. Python bestimmt die Methodenauflösungsreihenfolge (MRO), um festzulegen, welche übergeordnete Methode von super() aufgerufen werden soll.
In Ihrem Beispiel erbt Third sowohl von First als auch von Second. Wenn super().__init__() in Third.__init__() aufgerufen wird, bezieht es sich auf First.__init__(), da der MRO übergeordnete Klassen von links nach rechts auswertet. First wird vor Second in der Vererbungskette aufgeführt.
Python priorisiert beim Erstellen des MRO die Klassenreihenfolge in der Vererbungsliste. Im folgenden Beispiel ist das MRO also [Fourth, Second, Third, First, object]:
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")
In diesem Szenario ruft Fourth First.__init__() anstelle von Second.__init__() auf. weil First im MRO zuerst angetroffen wird.
Allerdings, wenn die Vererbungsreihenfolge lautet umgekehrt:
class Third(Second, First): def __init__(self): print("third")
Dann wird das MRO zu [Third, Second, First, object], und Third ruft zunächst Second.__init__() auf.
Bemerkenswerterweise erzwingt Python ein kohärentes MRO . Bei Inkonsistenzen in der Vererbungskette wird eine Ausnahme ausgelöst, um unerwartetes Verhalten zu verhindern.
Das obige ist der detaillierte Inhalt vonWie löst Pythons „super()' Methodenaufrufe bei Mehrfachvererbung auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!