Die Superfunktion in Python verstehen

高洛峰
Freigeben: 2017-02-18 10:48:10
Original
1229 Leute haben es durchsucht

Die spezifischen Funktionen der Funktion

super() sind wie folgt, basierend auf den beiden übergebenen Parametern:

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 ausgedruckt.

(<class &#39;__main__.C&#39;>, <class &#39;__main__.A&#39;>, <class &#39;__main__.B&#39;>, <class &#39;object&#39;>)name is wang
name is xiaoming
Nach dem Login kopieren

Wenn wir die Kommentare in Klasse A entfernen, wird der Ausführungscode ausgegeben: Sie können sehen, dass, wenn A ausgeführt wird, continue Die Funktion name() in B wird ausgeführt. 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 wang
name is xiaoming
name is cat
Nach dem Login kopieren


Weitere Artikel zum Verständnis der Superfunktion in Python finden Sie auf der chinesischen PHP-Website!


Verwandte Etiketten:
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage