Les fonctions spécifiques de la fonction
super() sont les suivantes en fonction des deux paramètres transmis :
Le nom de classe transmis comme premier paramètre détermine la position actuelle dans le MRO. MRO (Method Resolution Order) ;
Déterminez la liste MRO actuelle via l'auto-transmission comme deuxième paramètre.
def super(cls, inst): mro = inst.__class__.mro() #确定当前MRO列表 return mro[mro.index(cls) + 1] #返回下一个类
Le code suivant :
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()
Exécutez le code ci-dessus : Lorsque la fonction super() sous la classe C est exécutée, la fonction de nom sous la classe A est en fait appelée. La fonction super() est commentée dans A, donc l'exécution ne continue pas en arrière. Et l'ordre actuel de la liste MRO est imprimé sous la forme C,A,B,object.
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)name is wang name is xiaoming
Lorsque nous supprimons les commentaires dans la classe A, le code d'exécution apparaît : Vous pouvez voir que lorsque A est exécuté, continuer La fonction name() dans B est exécutée. S'il y a encore une super fonction dans B, il continuera à rechercher s'il y a une fonction name() dans l'objet.
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)name is wang name is xiaoming name is cat
Pour plus d'articles sur la compréhension de la super fonction en Python, veuillez faire attention au site Web PHP chinois !