Ce que cet article vous apporte, c'est comment implémenter l'héritage de la super fonction en Python ? Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Une grande différence entre Py 2.x et Py 3.x réside dans les classes, qu'il s'agisse de définition de classe ou d'héritage de classe. L'héritage de classe dans Py 3.x peut utiliser directement le mot-clé super() au lieu du super(Class, self) d'origine.
Alors, sur quelle base super() hérite-t-il ? Analysons-le aujourd’hui.
La fonction super() fonctionne comme suit 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 wangname 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 wangname is xiaomingname is cat
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!