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 singingVous pouvez vérifier l'ordre d'héritage :
print(Bird.__mro__) # Ordre de résolution des méthodesCela 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.
Défi
MoyenDans 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 baseDeviceinternet.py- Implémentez la classe de baseInternetsmartphone.py- Implémentez la classeSmartphonequi hérite des deux classes de basedriver.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 à BirdVé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éritageEssayez 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"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
1Les fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe paramètre selfMéthodesAttributsMéthode constructeur (__init__)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLa fonction super()Redéfinition de méthodeHéritage multipleOrdre de résolution des méthodesRécapitulatif - Hiérarchie des employés7Méthodes spéciales
Introduction aux méthodes magiquesSurcharge d'opérateursMéthodes magiques de conteneurRécapitulatif - Liste personnalisée10Patrons de conception, Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy2Décorateurs
Introduction aux décorateursDécorateur de propriétéDécorateur de méthode statiqueDécorateur de méthode de classe5Polymorphisme
Retour sur la redéfinition de méthodeDuck TypingClasses et méthodes abstraitesConception d'interfacesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageMixinsMéthodes statiques et de classeDécorateurs de classeGestionnaires de contexte11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Propriétés de classe
Variables d'instance vs variables de classeDécorateurs de propriétéAttributs privésRécapitulatif - Gestionnaire de compte bancaire