Wie implementiert die Superfunktion in Python die Vererbung?

不言
Freigeben: 2019-03-06 15:21:47
nach vorne
2053 Leute haben es durchsucht

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] #返回下一个类
Nach dem Login kopieren

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

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

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

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!

Verwandte Etiketten:
Quelle:Python
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!