Héritage

Définition

L'héritage est une relation entre deux classes. Elle indique qu'une classe dite classe fille (appelée aussi classe héritée ou dérivée) possède les attributs et les méthodes de la classe dite mère (appelée aussi classe de base). La classe fille peut posséder d'autres attributs ou méthodes qui lui sont propres : la classe fille hérite des propriétés et attributs de la classe mère.

ExempleUn cercle, c'est une forme, un rectangle aussi

Créons une classe forme. Une forme a un nom et l'on peut calculer son périmètre et sa surface.

1
class Forme:
2
    def __init__(self,nom):
3
        self.nom = nom
4
        self.__surface = -1
5
        self.__perimetre = -1
6
    def surface(self):
7
        raise NotImplementedError('La classe fille doit implémenter surface')
8
    def perimetre(self):
9
        raise NotImplementedError('La classe fille doit implémenter perimetre')
10
    def setSurface(self, s):
11
        self.__surface = s
12
    def getSurface(self):
13
         return self.__surface
14

Les méthodes surface et perimetre sont systématiquement en erreur. La classe fille doit iplémenter ces méthodes (surchage de la méthode de la classe mère). L'attribut __surface est privé donc deux mutateurs sont créés, setSurface et getSurface.

La classe Cercle est construite en héritant de la classe Forme , class Cercle(Forme)

1
class Cercle(Forme):
2
    def __init__(self, x, y, r=1):
3
        super().__init__("cercle")
4
        self.centre = (x, y)
5
        self.__rayon = r
6
    def setRayon(self, r):
7
        self.__rayon = r
8
        self.setSurface(-1)
9
        return self.__rayon
10
    def getRayon(self):
11
         return self.__rayon
12
    def surface(self):
13
        if self.getSurface() < 0:
14
            self.setSurface(np.pi * self.__rayon * self.__rayon)
15
        return self.getSurface()
16

Dans le constructeur de la classe Cercle, on appelle le constructeur de la classe mère Forme en utilisant la syntaxe super().__init__("cercle").

Dans la méthode surface de la classe Cercle, les méthodes getSurface et setSurface sont les méthodes de la classe mère (Forme).

Si un objet Cercle est construit et que la méthode perimetre est appelé alors une exception car la méthode perimetre n'est pas implémentée dans la classe Cercle :

x =Cercle(1,2,5)

x.perimetre()

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "<string>", line 9, in perimetre

NotImplementedError: La classe fille doit implémenter perimetre