Aller au contenu principal

Héritage

L'héritage est un concept fondamental en programmation orientée objet. Il permet de définir une classe en se basant sur une autre classe déjà existante. La classe existante est appelée la classe mère ou la classe de base, et la nouvelle classe est appelée la classe fille ou la classe dérivée. Cela permet de réutiliser le code déjà existant et de créer des classes plus spécialisées.

Par exemple, la classe Point définie précédemment peut être utilisée comme classe de base pour définir une classe PointCouleur qui ajoute un attribut couleur à un point. On pourrait aussi définir une classe PointTitre qui ajoute un attribut titre à un point. Ces deux classes héritent des attributs et des méthodes de la classe Point.

Le code Python correspondant serait le suivant :

class Point:
def __init__(self, x, y):
self.x = x
self.y = y

def distance(self, other):
return ((self.x - other.x) ** 2 + (self.y - other.y) ** 2) ** 0.5

class PointCouleur(Point):
def __init__(self, x, y, couleur):
super().__init__(x, y)
self.couleur = couleur

class PointTitre(Point):
def __init__(self, x, y, titre):
super().__init__(x, y)
self.titre = titre

Dans cet exemple, la classe PointCouleur hérite de la classe Point en spécifiant Point entre parenthèses après le nom de la classe. Cela signifie que PointCouleur hérite de tous les attributs et méthodes de la classe Point. La méthode __init__ de la classe PointCouleur appelle la méthode __init__ de la classe Point en utilisant la fonction super(). Cela permet d'initialiser les attributs de la classe Point avant d'ajouter l'attribut couleur.

Ainsi, l'héritage permet de créer une hiérarchie de classes où les classes filles héritent des attributs et des méthodes des classes mères.

La méthode super()

La fonction super() est utilisée pour appeler un attribut ou une méthode de la classe mère depuis une classe fille. Elle est souvent utilisée dans les méthodes __init__ pour initialiser les attributs de la classe mère avant d'ajouter des attributs spécifiques à la classe fille comme dans l'exemple précédent.

Il serait également possible d'appeler directement la méthode de la classe mère comme suit :

class PointCouleur(Point):
def __init__(self, x, y, couleur):
Point.__init__(self, x, y)
self.couleur = couleur

Toutefois, l'utilisation de super() est recommandée car elle permet de gérer automatiquement la hiérarchie des classes. De plus, la méthode super() est particulièrement utile également pour étendre une méthode de la classe mère dans une classe fille plutôt que de la remplacer complètement. Nous verrons ceci à la section polymorphisme. ceci à la section polymorphisme.