Maison  >  Article  >  développement back-end  >  Explication détaillée du code d'héritage de classe (python)

Explication détaillée du code d'héritage de classe (python)

Y2J
Y2Joriginal
2017-04-22 09:44:391882parcourir

Cet article présente principalement des informations pertinentes sur des exemples détaillés d'héritage de classes python. Les amis qui en ont besoin peuvent se référer à

Héritage des classes python

Pour de nombreux articles. Lorsqu'ils expliquent l'héritage des classes Python, la plupart d'entre eux parlent de concepts tels que le oop et le polymorphisme. Je pense que cela n'est peut-être pas très utile pour les développeurs ayant une certaine base. Il est préférable d'utiliser directement le code écrit dans diverses situations. effet de l'exécution du code pour une certaine situation de code. Cela peut être plus utile aux développeurs. Ne dites pas de bêtises, allez simplement au code.

Il n'y a pas de distinction entre les classes classiques et les classes de nouveau style. L'analyse suivante s'applique à la fois aux classes de nouveau style et aux classes classiques

Pour la fonction init dans. la classe, seule une initialisation est appelée une fonction (ps : l'initialisation et la création d'instance ne sont pas un processus, la création de l'instance se fait via une fonction create), s'il n'y a pas de déclaration explicite de la fonction init dans la sous-classe, la La sous-classe appellera la fonction init de la classe parent, mais la fonction init dans la classe parent de la classe parent ne sera pas appelée à nouveau. Si la fonction init est explicitement déclarée, la fonction d'initialisation de la classe parent ne sera pas appelée pendant le processus. Lors de l'initialisation de la sous-classe, seule la déclaration dans la fonction init de la sous-classe sera appelée. En même temps, il n'y aura aucun attribut déclaré dans la fonction init de la classe parent dans l'instance de la sous-classe. >

Le résultat de l'exécution à ce moment est

class animal():
 name="hh"
 sex="man"
 def init(self):
  self.height=10
  self.weight=50
 def deception(self):
  print "ansible.height:"+self.height+" animal.weight:"+self.weight
 def run(self):
  print "animal is running...."
class dog(animal):
 def init(self):
  pass
if name=="main":
 dg=dog()
 print dg.dict
{}

Lorsque la classe dog est modifiée comme suit (ps : il n'y a pas de méthode d'initialisation déclarée affichée pour le moment ):

A ce moment, en raison de l'appel direct de la méthode animal init de la classe parent, le résultat est le suivant :

class dog(animal):
 def run(self):
  print "dog is running..."

Si une classe hérite de la classe dog à ce moment-là, que va-t-il se passer à ce moment-là ? (L'interpréteur Python recherche d'abord la méthode init dans la sous-classe. Si elle n'est pas trouvée, il la recherche ensuite dans la classe parent jusqu'à ce qu'elle soit trouvée et l'exécute. Il n'exécutera plus la méthode init de la classe parent de la classe parent. Aucun init n'est en cours d'exécution pour le moment. Aucun attribut n'est créé dans la méthode. Par exemple, dans l'exemple ci-dessus, les attributs de poids et de taille ne sont pas inclus dans l'exemple obtenu lors de la première exécution)

{'weight': 50, 'height': 10}

Le résultat à ce moment est également

class animal():
 name="hh"
 sex=""
 def init(self):
  self.height=10
  self.weight=50
 def deception(self):
  print "ansible.height:"+self.height+" animal.weight:"+self.weight
 def run(self):
  print "animal is running...."
class dog(animal):
 def init(self):
  pass
 def run(self):
  print "dog is running..."
class jinmao(dog):
 # def init(self):
 #  self.ji="jinmao"
 pass
if name=="main":
 dg=jinmao()
 print dg.dict
{}

Que se passera-t-il en cas d'héritage multiple de classes ? (Dans l'héritage multiple, la fonction init de la classe parent déclarée par le premier paramètre du paramètre d'héritage de la classe sera exécutée. S'il n'y a pas de fonction init dans la classe parent, continuez à rechercher s'il existe une fonction init dans la classe parent. classe parent de la classe parent, et ainsi de suite. Si l'en-tête est trouvé ou non, il est remplacé par la classe parent déclarée par le deuxième paramètre. Le processus est le même que le premier paramètre jusqu'à ce que la fonction init soit trouvée. aucun en-tête n'est trouvé, il n'est pas initialisé.) Le code peut être testé par vous-même à partir de l'exemple précédent.

L'utilisation et les caractéristiques de super pour appeler des méthodes dans les classes parents dans les sous-classes.


Résumé :

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!

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