Heim  >  Artikel  >  Backend-Entwicklung  >  Die Superfunktion in Python verstehen

Die Superfunktion in Python verstehen

高洛峰
高洛峰Original
2017-02-18 10:48:101209Durchsuche

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

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

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


Weitere Artikel zum Verständnis der Superfunktion in Python finden Sie auf der chinesischen PHP-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