13.1 Les bases de l'héritage
Objectifs d'apprentissage
À la fin de cette section, vous devriez être en mesure de :
- Identifier les relations « est-un » (is-a) et « possède-un » (has-a) entre les classes.
- Différencier une sous-classe d'une superclasse.
- Créer une superclasse, une sous-classe et des instances de chacune.
Relations « est-un » et « possède-un »
Les classes sont reliées entre elles. Une relation « est-un » (is-a) existe entre une sous-classe et une superclasse. Ex. : Une jonquille est une plante. Une classe Daffodil hérite d'une superclasse, Plant.
Les relations « est-un » peuvent être confondues avec les relations « possède-un ». Une relation « possède-un » (has-a) existe entre une classe qui en contient une autre. Ex. : Un employé possède un ordinateur portable fourni par l'entreprise. Remarque : L'ordinateur portable n'est pas un employé.
Concepts en pratique
Relations entre classes
L'héritage en Python
L'héritage utilise une relation is-a pour faire hériter une classe d'une superclasse. La sous-classe hérite de tous les attributs et méthodes de la superclasse, et étend les fonctionnalités de celle-ci.
En Python, une sous-classe est créée en incluant le nom de la superclasse entre parenthèses au début de la définition de la sous-classe :
class SuperClass:
# SuperClass attributes and methods
class SubClass(SuperClass):
# SubClass attributes and methods
Concepts en pratique
Création de sous-classes
Terminologie alternative pour l'héritage
La documentation de Python sur l'héritage utilise plusieurs termes pour désigner la classe dont on hérite et la classe qui hérite. Cet ouvrage utilise systématiquement superclasse/sous-classe par souci de cohérence.
| Classe dont on hérite | Classe qui hérite |
|---|---|
| superclasse | sous-classe |
| classe de base | classe dérivée |
| classe parente | classe enfant |
À vous d'essayer
Classes Employee et Developer
À partir de la classe Employee fournie, créez une classe Developer qui hérite de Employee. La classe Developer possède une méthode, update_codebase(), qui affiche "Employee has updated the codebase". Ensuite, utilisez l'instance de Developer, python_dev, pour appeler print_company() et update_codebase().
À vous d'essayer
Classes Polygon
Définissez trois classes : Polygon, Rectangle et Square :
Polygonpossède la méthodep_disp(), qui affiche"object is a Polygon".Rectanglehérite dePolygonet possède la méthoder_disp(), qui affiche"object is a Rectangle".Squarehérite deRectangleet possède la méthodes_disp(), qui affiche"object is a Square".
Créez une instance de chaque classe. Ensuite, pour chaque instance, appelez toutes les méthodes auxquelles elle a accès.