Maison  >  Article  >  développement back-end  >  Comprendre la super fonction en Python

Comprendre la super fonction en Python

高洛峰
高洛峰original
2017-02-18 10:48:101200parcourir

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 &#39;__main__.C&#39;>, <class &#39;__main__.A&#39;>, <class &#39;__main__.B&#39;>, <class &#39;object&#39;>)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 &#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


Pour plus d'articles sur la compréhension de la super fonction en Python, veuillez faire attention au site Web PHP chinois !


Déclaration:
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