Comprendre la super fonction en Python

高洛峰
Libérer: 2017-02-18 10:48:10
original
1203 Les gens l'ont consulté

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


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


Étiquettes associées:
source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!