Menu
Coddy logo textTech

Héritage multiple

Fait partie de la section Object Oriented Programming du Journey Python de Coddy — leçon 20 sur 64.

L'héritage multiple permet à une classe d'hériter de plus d'une classe parente, en combinant des fonctionnalités provenant de différentes sources.

Voici deux classes parentes :

class Animal:
    def __init__(self, name):
        self.name = name
    
    def eat(self):
        return f"{self.name} is eating"

class Flyable:
    def fly(self):
        return f"{self.name} is flying"

Créez une classe enfant qui hérite des deux parents :

class Bird(Animal, Flyable):
    def __init__(self, name, species):
        super().__init__(name)  # Appelle le __init__ de Animal
        self.species = species
    
    def sing(self):
        return f"{self.name} is singing"

La syntaxe class Bird(Animal, Flyable): signifie que Bird hérite à la fois de Animal et de Flyable.

Créez un objet oiseau et utilisez les méthodes des deux parents :

sparrow = Bird("Sparrow", "House sparrow")

Appelez les méthodes de la première classe parente :

print(sparrow.eat())

Appelez les méthodes de la deuxième classe parente :

print(sparrow.fly())

Appelez la propre méthode de l'oiseau :

print(sparrow.sing())

Sortie :

Sparrow is eating
Sparrow is flying
Sparrow is singing

Vous pouvez vérifier l'ordre d'héritage :

print(Bird.__mro__)  # Ordre de résolution des méthodes

Cela montre quel parent est examiné en premier lors de la recherche de méthodes.

Point clé : L'héritage multiple utilise la syntaxe class Child(Parent1, Parent2):. La classe enfant obtient toutes les méthodes de toutes les classes parentes. Python vérifie les parents de gauche à droite lors de la recherche de méthodes.

challenge icon

Défi

Moyen

Dans ce défi, vous allez implémenter un système de classes multi-fichiers illustrant l'héritage multiple avec des smartphones. Chaque classe est organisée dans son propre fichier pour une meilleure organisation du code.

Vous devrez modifier ces fichiers :

  • device.py - Implémentez la classe de base Device
  • internet.py - Implémentez la classe de base Internet
  • smartphone.py - Implémentez la classe Smartphone qui hérite des deux classes de base
  • driver.py - Implémentez des cas de test qui vérifieront que votre implémentation fonctionne correctement

Chaque fichier contient des commentaires TODO détaillés qui vous guideront étape par étape tout au long de l'implémentation.

Aide-mémoire

L'héritage multiple permet à une classe d'hériter de plus d'une classe parente en utilisant la syntaxe class Child(Parent1, Parent2):

class Animal:
    def __init__(self, name):
        self.name = name
    
    def eat(self):
        return f"{self.name} is eating"

class Flyable:
    def fly(self):
        return f"{self.name} is flying"

class Bird(Animal, Flyable):
    def __init__(self, name, species):
        super().__init__(name)  # Appelle le __init__ de Animal
        self.species = species
    
    def sing(self):
        return f"{self.name} is singing"

La classe enfant hérite de toutes les méthodes de toutes les classes parentes :

sparrow = Bird("Sparrow", "House sparrow")
print(sparrow.eat())   # Provient de la classe Animal
print(sparrow.fly())   # Provient de la classe Flyable
print(sparrow.sing())  # Méthode propre à Bird

Vérifiez l'ordre de résolution des méthodes (MRO) pour voir quel parent est vérifié en premier :

print(Bird.__mro__)  # Affiche l'ordre d'héritage

Essayez vous-même

# TODO: Importer la classe Smartphone depuis smartphone.py

# Créer un smartphone et tester ses méthodes
# TODO: Créer un objet Smartphone avec la marque "Apple" et le modèle "iPhone 13"
my_phone = None

# TODO: Appeler et afficher le résultat de la méthode power_on() du smartphone

# TODO: Appeler et afficher le résultat de la méthode connect() du smartphone

# TODO: Appeler et afficher le résultat de la méthode make_call() du smartphone avec le paramètre "123-456-7890"
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Object Oriented Programming