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 '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)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 '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)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!