Bases de Python : Programmation Orientée Objet (POO)
Bases de Python : Programmation Orientée Objet (POO)
Lesson 3 of 7 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
L'héritage est l'un des concepts fondamentaux de la Programmation Orientée Objet (POO).
Il permet à une classe (appelée enfant ou sous-classe) d'hériter des attributs et des méthodes d'une autre classe (appelée parent ou super-classe).
Cela signifie que vous pouvez définir un comportement commun et des données dans une classe de base, puis créer des classes plus spécialisées qui réutilisent et personnalisent cette fonctionnalité — sans avoir à réécrire le même code.
Syntaxe de base pour l'héritage
En Python, l'héritage s'implémente en spécifiant le nom de la classe parente entre parenthèses après le nom de la classe enfant.
class ParentClass:
# Attributs et méthodes de la classe parente
class ChildClass(ParentClass):
# Attributs et méthodes de la classe enfant
Quand une classe enfant hérite d'une classe parente, elle obtient :
- Tous les attributs de la classe parente (variables liées à l'objet)
- Toutes les méthodes de la classe parente (fonctions liées à l'objet)
- Tout constructeur (
__init__) que la classe parente peut avoir
Exemple : Animaux et Sons
Illustrons l'héritage avec quelque chose auquel tout le monde peut s'identifier — les animaux.
Nous commençons par une classe générale Animal qui définit ce que tous les animaux ont en commun, puis nous créons des types spécifiques d'animaux (Dog et Cat) qui partagent ces caractéristiques mais émettent des sons différents.
Voici la classe de base :
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def sound(self):
pass # Chaque animal spécifique décidera de son propre son
La classe Animal contient :
- Une méthode
__init__qui initialise lenameet l'agede chaque animal. - Une méthode
sound()qui ne fait rien pour l'instant (passest juste un espace réservé). Nous la remplacerons dans chaque type d'animal par le son spécifique à l'espèce.
Créons maintenant deux classes d'animaux spécifiques :
class Dog(Animal):
def sound(self):
print("Woof woof !")
class Cat(Animal):
def sound(self):
print("Meow !")
Voici ce qui se passe :
DogetCathéritent tous deux deAnimal, ils obtiennent donc automatiquement les attributsnameetagesans avoir à réécrire ce code.- Chacun remplace la méthode
sound()pour produire son propre son unique.
Création et utilisation des objets
dog = Dog("Rex", 2)
cat = Cat("Mimi", 3)
print(dog.name) # Rex
dog.sound() # Woof woof !
print(cat.name) # Mimi
cat.sound() # Meow !
Lorsque nous créons Dog("Rex", 2), voici les étapes :
- Python appelle la méthode
__init__de la classeAnimal(carDogn'a pas la sienne). - Les valeurs
nameetagepassées sont stockées dans cet objet. - Lorsque nous appelons
dog.sound(), Python cherche une méthodesound()dansDogen premier. Il trouve celle que nous avons écrite et l'exécute — affichant"Woof woof !".
La même logique s'applique à Cat, qui trouve et exécute sa propre méthode sound().
Cet exemple montre la magie de l'héritage :
- Nous écrivons une seule fois la configuration commune (
__init__) dans la classeAnimal. - Chaque sous-classe (
Dog,Cat) conserve les fonctionnalités partagées et ajoute son propre comportement unique. - Le résultat est un code moins répétitif, une logique plus organisée, et un moyen plus simple de gérer des objets liés.
3. Comment cela fonctionne
- Structure partagée : La méthode
__init__deAnimals'exécute lors de la création d'un objetDogouCat, car elles l'héritent automatiquement. - Surcharge de méthode :
DogetCatpossèdent chacun leur propre méthodesound()qui remplace (override) le placeholder deAnimal. Quand vous appelezsound()sur unDog, Python utilise celle définie dansDog, pas celle deAnimal.
ASTUCE : Si une classe enfant ne remplace pas une méthode, elle utilise automatiquement celle de la classe parente.
Pourquoi utiliser l'héritage ?
L'héritage vous permet :
- D'éviter la répétition de code en plaçant la logique partagée dans une classe de base unique.
- De rendre votre code plus modulaire et lisible.
- De construire des classes spécialisées à partir d'un modèle général.
Exemple de pensée en héritage :
Animal→ modèle général avecname,ageet une méthodesound().Dog→ type spécifique d'animal avec son propre son.Cat→ autre type d'animal avec un son différent.
Conclusion
L'héritage est un outil puissant en POO pour créer une hiérarchie de classes, en partant de concepts généraux vers des concepts plus spécialisés.
En Python, vous l'implémentez en :
- Écrivant une classe parente avec des attributs et méthodes communs.
- Créant des sous-classes qui listent le nom de la classe parente entre parenthèses.
- Ajoutant ou remplaçant des méthodes dans les sous-classes selon les besoins.
Dans la prochaine leçon, nous approfondirons ce concept en explorant super() — une manière pour les sous-classes d'appeler et d'étendre le comportement de leurs classes parentes.