Héritage hiérarchique

13.4 Héritage hiérarchique

Objectifs d'apprentissage

À la fin de cette section, vous devriez être en mesure de :

  • Identifier les relations entre les classes selon les types d'héritage.
  • Construire des classes formant un héritage hiérarchique.

Bases de l'héritage hiérarchique

L'héritage hiérarchique (hierarchical inheritance) est un type d'héritage dans lequel plusieurs classes héritent d'une même superclasse. L'héritage multiniveau (multilevel inheritance) est un type d'héritage dans lequel une sous-classe devient la superclasse d'une autre classe. La combinaison de l'héritage hiérarchique et de l'héritage multiniveau crée une organisation arborescente des classes.

Faites le point

Organisation hiérarchique et types d'héritage

Concepts en pratique

Organisation hiérarchique

1.
Lequel est un exemple d'héritage hiérarchique ?
  1. La classe B hérite de la classe A
    La classe C hérite de la classe A
  2. La classe B hérite de la classe A
    La classe C hérite de la classe B
  3. La classe B hérite de la classe A
    La classe C hérite de la classe D
2.
Pour quel groupe de classes l'héritage hiérarchique est-il approprié ?
  1. Cat, Dog, Bird
  2. Employee, Developer, SalesRep
  3. Dessert, BakedGood, ApplePie

Mise en œuvre de l'héritage hiérarchique

Plusieurs classes peuvent hériter d'une même classe en incluant simplement le nom de la superclasse dans la définition de chaque sous-classe.

Exemple 13.4

Membres d'une chorale

    class ChoirMember:
      def display(self):
        print("Current choir member")

    class Soprano(ChoirMember):
      def display(self):
        super().display()
        print("Part: Soprano")

    class Soprano1(Soprano):
      def display(self):
        super().display()
        print("Division: Soprano 1")

    class Alto(ChoirMember):
      def display(self):
        super().display()
        print("Part: Alto")

    class Tenor(ChoirMember):
      def display(self):
        super().display()
        print("Part: Tenor")

    class Bass(ChoirMember):
      def display(self):
        super().display()
        print("Part: Bass")

    mem_10 = Alto()
    mem_13 = Tenor()
    mem_15 = Soprano1()

    mem_10.display()
    print()
    mem_13.display()
    print()
    mem_15.display()

La sortie du code est :

    Current choir member
    Part: Alto

    Current choir member
    Part: Tenor

    Current choir member
    Part: Soprano
    Division: Soprano 1

Concepts en pratique

Mise en œuvre de l'héritage hiérarchique

Considérez le programme :

    class A:
      def __init__(self, a_attr=0):
        self.a_attr = a_attr

    class B(A):
      def __init__(self, a_attr=0, b_attr=0):
        super().__init__(a_attr)
        self.b_attr = b_attr

    class C(A):
      def __init__(self, a_attr=0, c_attr=0):
        super().__init__(a_attr)
        self.c_attr = c_attr

    class D(B):
      def __init__(self, a_attr=0, b_attr=0, d_attr=0):
        super().__init__(a_attr, b_attr)
        self.d_attr = d_attr
    
    b_inst = B(2)
    c_inst = C(c_attr=4)
    d_inst = D(6, 7)
3.
Quelle est la valeur de b_inst.b_attr ?
  1. 0
  2. 2
  3. Error
4.
À quels attributs c_inst a-t-il accès ?
  1. a_attr
  2. a_attr, c_attr
  3. c_attr
5.
À quels attributs d_inst a-t-il accès ?
  1. b_attr, d_attr
  2. a_attr, b_attr, d_attr
  3. d_attr

À vous d'essayer

Redéfinition de méthodes

Définissez trois classes : Instrument, Woodwind et String.

  • Instrument possède l'attribut d'instance owner, avec la valeur par défaut « unknown ».
  • Woodwind hérite de Instrument et possède l'attribut d'instance material avec la valeur par défaut « wood ».
  • String hérite de Instrument et possède l'attribut d'instance num_strings, avec la valeur par défaut 4.

La sortie doit correspondre à :

    This flute belongs to unknown and is made of silver
    This cello belongs to Bea and has 4 strings