Python: Héritage: Difference between revisions

From Wiki Cours
Jump to navigation Jump to search
No edit summary
Line 30: Line 30:
a.f_a()
a.f_a()
a.f_b()  # renvoie une erreur
a.f_b()  # renvoie une erreur
</source>
== Un exemple ==
<source lang="py">
class HomoHabilis:
    def caracteristique(self):
        print "taille des pierres"
class HomoErectus(HomoHabilis):
    def caracteristique(self):
        HomoHabilis.caracteristique(self)
        print "se tient debout" 
   
class HomoNeanderthalensis(HomoErectus):
    def caracteristique(self):
        HomoErectus.caracteristique(self)
        print "un cousin disparu"
   
class HomoSapiens(HomoErectus):
    def caracteristique(self):
        HomoErectus.caracteristique(self)
        print "ecrit en Python"
moi = HomoSapiens()
moi.caracteristique()
</source>
</source>

Revision as of 23:24, 15 September 2015

<--Sommaire

Il peut exister une hiérarchie naturelle entre objets dans le sens que certains sont des spécialisations d'objet plus génériques. Ainsi, on peut dériver une classe d'une autre appelée parente. Dans ce cas, la classe dérivée héritera de tous les attributs et méthodes de la classe parente. On pourra lui en ajouter d'autres mais seule cette classe pourra alors les utiliser.

Déclaration et initialisation

On peut créer une nouvelle classe en la faisant dériver d'une autre classe. Dans ce cas, la classe hérite des attributs et méthodes de la classe mère et on peut lui en ajouter d'autres qui la spécialiseront et auxquelles la classe mère n'aura pas accès. Voici la syntaxe pour que 'B' dérive de 'A', on notera la syntaxe des constructeurs.

class A:   # classe parente
    data_a = 0
    def __init__(self,d=1):
        self.data_a = d
    def f_a(self):
        print "Je suis de la classe A"

class B(A): # la classe B dérive de A
    data_b = 0
    def __init__(self,d=2,b=1):
        A.__init__(self,d)  # appelle le constructeur de la classe parente
        self.data_b = b
    def f_b(self):
        print "Je suis de la classe B"

b = B(3,4)
b.f_a()
b.f_b()
print b.data_a, b.data_b
a = A()
a.f_a()
a.f_b()  # renvoie une erreur

Un exemple

class HomoHabilis:
    def caracteristique(self):
        print "taille des pierres"

class HomoErectus(HomoHabilis):
    def caracteristique(self):
        HomoHabilis.caracteristique(self)
        print "se tient debout"  
    
class HomoNeanderthalensis(HomoErectus):
    def caracteristique(self):
        HomoErectus.caracteristique(self)
        print "un cousin disparu"
    
class HomoSapiens(HomoErectus):
    def caracteristique(self):
        HomoErectus.caracteristique(self)
        print "ecrit en Python"

moi = HomoSapiens()
moi.caracteristique()