Les bases de l'héritage

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é.

Faites le point

Relation « est-un » entre Employee et Developer

Concepts en pratique

Relations entre classes

1.
Quelle est la relation entre une classe Doughnut et une classe Pastry ?
  1. is-a
  2. has-a
2.
Quelle est la relation entre une classe Kitchen et une classe Freezer ?
  1. is-a
  2. has-a
3.
Un gardien de but est un joueur. Goalkeeper est une ______classe. Player est une ______classe.
  1. super ; sous
  2. sous ; super

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

Faites le point

Utiliser l'héritage pour créer des sous-classes

Concepts en pratique

Création de sous-classes

4.
Comment définit-on une classe Daisy qui hérite de la classe Plant ?
  1. class Plant(Daisy):
  2. class Daisy(Plant):
  3. class Daisy:
    class Plant:
    
5.
Supposons qu'une classe CarryOn hérite d'une classe Luggage. Comment crée-t-on une instance de CarryOn ?
  1. small_bag = CarryOn()
  2. small_bag = Luggage(CarryOn)
  3. small_bag = CarryOn(Luggage)
6.
Étant donné les classes SuperClass et SubClass suivantes, auxquels des éléments suivants une instance de SubClass peut-elle accéder ?
class SuperClass():
  def func_1(self):
    print('Superclass function')

class SubClass(SuperClass):
  def func_2(self):
    print('Subclass function')
  1. func_1() uniquement
  2. func_2() uniquement
  3. func_1() et func_2()
7.
Étant donné les classes SuperClass et SubClass suivantes, auxquels des éléments suivants une instance de SuperClass peut-elle accéder ?
class SuperClass():
  def func_1(self):
    print('Superclass function')

class SubClass(SuperClass):
  def func_2(self):
    print('Subclass function')
  1. func_1() uniquement
  2. func_2() uniquement
  3. func_1() et func_2()

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
Tableau 13.1

À 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 :

  • Polygon possède la méthode p_disp(), qui affiche "object is a Polygon".
  • Rectangle hérite de Polygon et possède la méthode r_disp(), qui affiche "object is a Rectangle".
  • Square hérite de Rectangle et possède la méthode s_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.