Maison > développement back-end > Tutoriel Python > Comment la super fonction de Python implémente-t-elle l'héritage ?

Comment la super fonction de Python implémente-t-elle l'héritage ?

不言
Libérer: 2019-03-06 15:21:47
avant
2109 Les gens l'ont consulté

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] #返回下一个类
Copier après la connexion

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()
Copier après la connexion

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 &#39;__main__.C&#39;>, <class &#39;__main__.A&#39;>, <class &#39;__main__.B&#39;>, <class &#39;object&#39;>)name is wangname is xiaoming
Copier après la connexion

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 &#39;__main__.C&#39;>, <class &#39;__main__.A&#39;>, <class &#39;__main__.B&#39;>, <class &#39;object&#39;>)name is wangname is xiaomingname is cat
Copier après la connexion

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!

Étiquettes associées:
source:Python
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal