Maison  >  Article  >  développement back-end  >  Explication détaillée de l'héritage de classe en Python avec des exemples

Explication détaillée de l'héritage de classe en Python avec des exemples

Y2J
Y2Joriginal
2017-04-28 09:27:021204parcourir

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, c'est juste une initialisation C'est une fonction appelée (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 le sous-classe, 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, l'initialisation de la classe parent ne sera pas appelée. lors de l'initialisation de la sous-classe, la fonction appellera uniquement la fonction __init__ déclarée dans la sous-classe. En même temps, il n'y aura aucun attribut déclaré dans la fonction __init__ de la classe parent dans l'instance de 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 de chien est modifiée comme suit (ps : il n'y a pas de déclaration affichée de __init__ méthode à ce moment) :

A ce moment, en raison de l'appel direct de la méthode __init__ de l'animal de 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 chien à 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. S'il n'est pas trouvé, il la recherche ensuite dans la classe parent jusqu'à ce qu'elle soit trouvée et l'exécute, et n'exécute plus la méthode __init__ de la classe parent de la classe parent.À l'heure actuelle, aucun attribut n'a été créé dans la méthode __init__ qui n'a pas été exécuté. Par exemple, dans l'exemple ci-dessus, l'exemple obtenu lors de la première exécution n'a pas les attributs de poids et de taille)
{'weight': 50, 'height': 10}

Le résultat à ce moment-là est le même
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 d'une classe ? (Dans l'héritage multiple, la fonction __init__ dans 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 pour voir s'il y en a une dans la classe parent. Classe parent de la classe parent.Et ainsi de suite.Si l'en-tête est trouvé ou non, la classe parent déclarée par le deuxième paramètre est utilisée tant que la fonction __init__ n'est pas trouvée. le code n'est pas initialisé. Vous pouvez le tester vous-même en vous basant sur 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é :

Si vous souhaitez savoir comment la machine virtuelle Python crée une classe (plus précisément, lors du chargement d'un fichier .pyc, comment il est traité via la logique de code du Les objets de classe en langage C sont placés dans un morceau de mémoire. J'apprends également cet aspect, j'espère que nous pourrons explorer ensemble) .

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