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
Barbara StreisandOriginal
2024-12-20 17:35:20865Durchsuche

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")

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!

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