Heim > Backend-Entwicklung > Python-Tutorial > Wie löst Pythons „super()' Methodenaufrufe bei Mehrfachvererbung auf?

Wie löst Pythons „super()' Methodenaufrufe bei Mehrfachvererbung auf?

Barbara Streisand
Freigeben: 2024-12-20 17:35:20
Original
870 Leute haben es durchsucht

How Does Python's `super()` Resolve Method Calls in Multiple Inheritance?

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

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

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!

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