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..."
{'weight': 50, 'height': 10}
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.
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!