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.
Concepts en pratique
Organisation hiérarchique
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)
À vous d'essayer
Redéfinition de méthodes
Définissez trois classes : Instrument, Woodwind et String.
Instrumentpossède l'attribut d'instanceowner, avec la valeur par défaut « unknown ».Woodwindhérite deInstrumentet possède l'attribut d'instancematerialavec la valeur par défaut « wood ».Stringhérite deInstrumentet possède l'attribut d'instancenum_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