Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert die Superfunktion in Python die Vererbung?

Wie implementiert die Superfunktion in Python die Vererbung?

不言
不言nach vorne
2019-03-06 15:21:472074Durchsuche

In diesem Artikel geht es um die Implementierung der Vererbung der Superfunktion in Python. Ich hoffe, dass er für Freunde hilfreich ist.

Ein großer Unterschied zwischen Py 2.x und Py 3.x sind Klassen, sei es die Klassendefinition oder die Klassenvererbung. Bei der Vererbung von Klassen in Py 3.x kann das Schlüsselwort super() anstelle des ursprünglichen Schlüsselworts super(Class, self) direkt verwendet werden.

Auf welcher Grundlage erbt super()? Lassen Sie es uns heute analysieren.

Die super()-Funktion funktioniert basierend auf den beiden übergebenen Parametern wie folgt:

Der als erster Parameter übergebene Klassenname bestimmt die aktuelle Position im MRO. MRO (Method Resolution Order);

Bestimmen Sie die aktuelle MRO-Liste durch Selbstübergabe als zweiten Parameter.

def super(cls, inst):
   mro = inst.__class__.mro() #确定当前MRO列表
   return mro[mro.index(cls) + 1] #返回下一个类

Der folgende Code:

class A(object):
    def name(self):
        print('name is xiaoming')    
        #super(A,self).name()

class B(object): 
    def name(self):
        print('name is cat')
      
class C(A,B):
    def name(self):
        print('name is wang')
        super(C,self).name()if __name__ == '__main__':

c = C()
print(c.__class__.__mro__)
c.name()

Führen Sie die obige Codeausgabe aus: Wenn die super()-Funktion unter Klasse C ausgeführt wird, wird tatsächlich die Namensfunktion unter Klasse A aufgerufen. Die Funktion super() ist in A auskommentiert, sodass die Ausführung nicht rückwärts fortgesetzt wird. Und die aktuelle MRO-Listenreihenfolge wird als C,A,B,Objekt ausgegeben.

(<class &#39;__main__.C&#39;>, <class &#39;__main__.A&#39;>, <class &#39;__main__.B&#39;>, <class &#39;object&#39;>)name is wangname is xiaoming

Wenn wir die Kommentare in Klasse A entfernen, wird der Ausführungscode ausgegeben: Sie können sehen, dass die Ausführung fortgesetzt wird, nachdem A ausgeführt wurde name()-Funktion in B. Wenn in B noch eine Superfunktion vorhanden ist, wird weiterhin nachgeschaut, ob im Objekt eine name()-Funktion vorhanden ist.

(<class &#39;__main__.C&#39;>, <class &#39;__main__.A&#39;>, <class &#39;__main__.B&#39;>, <class &#39;object&#39;>)name is wangname is xiaomingname is cat

Das obige ist der detaillierte Inhalt vonWie implementiert die Superfunktion in Python die Vererbung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:Python. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen