Sites


Initiation à python

Étendre et dériver une classe

Un autre cas de réutilisation qui ne sera pas rare, sera souvent d'avoir besoin de créer une variante de l'objet, avec plus de méthodes, des attributs différents ou avec d'autres différences. Dans ce cas, vous avez deux solutions :

  • soit utiliser la classe de base telle quelle et ne rien changer (cas lorsqu'on utilise des modules)
  • soit modifier la classe d'origine pour définir les nouveaux besoins et les y intégrer
  • soit créer une nouvelle classe qui sera basée sur la première mais qui prendra en compte spécifiquement ces différences.

Vous comprendrez à nous lire que cette dernière méthode est la plus fiable : elle permet de préserver une classe originale saine et exempte des cas particuliers qui sont alors simplement définies dans les classes filles.
Ce concept d'héritage est mis en oeuvre simplement en passant le nom de la classe d'origine en paramètre de la classe fille :

class MaClasse:    def affiche(self):
              print self.nom
                                              
                                       
  objet=MaClasseFille("Cedric")
  objet.affiche()

    def __init__(self, nom):
            self.essai="Bonjour"
            self.nom=nom
    def affiche(self):
            print self.essai, self.nom

class MaClasseFille(MaClasse):
    def affiche(self):
            print self.nom                                    

objet=MaClasseFille("Cedric")
objet.affiche()
  

ce qui affiche

Bonjour Cedric

La classe file peut donc posséder ses propres méthodes voire redéfinir les méthodes de sa classe mère :

class MaClasse:
    def __init__(self, nom):
            self.essai="Bonjour"
            self.nom=nom
    def affiche(self):
            print self.essai, self.nom

class MaClasseFille(MaClasse):
    def affiche(self):
            print self.nom                                 

objet=MaClasseFille("Cedric")
objet.affiche()  

Avec cet exemple, la classe fille n'affichera que le nom passé en paramètre lors de l'instanciation alors que dans la classe mère, le nom était concaténé à "Bonjour". Il sera ainsi possible de dériver énormément de chose sans toucher à l'original et ainsi diminuer le risque d'introduction de bugs dans d'autres applications qui utiliseraient aussi cette classe. Le code devient alors réellement plus simple à maintenir et chaque programme devient plus sûr. Les efforts peuvent être mutualisés sur plusieurs classes, voire plusieurs applications car toute modification effectuée sur la classe mère sera automatiquement reportées sur les classes filles qui en hérite, ce qui est fondamental lors d'un débogage.

Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.

Vous devriez rafraîchir la page.