Héritage Python POO : classes parent et enfant

Apprenez l'héritage en Python POO. Maîtrisez les sous-classes, les méthodes de remplacement, l'utilisation de super() et plusieurs modèles d'héritage.

Essayez dans l'éditeur

Aperçu

L'héritage est l'un des piliers fondamentaux de la programmation orientée objet (POO). Il s'agit d'un mécanisme qui permet à une nouvelle classe (appelée enfant ou sous-classe) d'adopter les attributs et les méthodes d'une classe existante (appelée parent ou superclasse). Ce modèle de conception favorise la réutilisation du code, réduit la redondance et établit des relations logiques et hiérarchiques entre les différents composants de votre application.

Pour implémenter l'héritage en Python, vous transmettez le nom de la classe parent entre parenthèses lors de la définition de la classe enfant : `class Child(Parent):`. La classe enfant hérite immédiatement de toutes les méthodes et variables du parent. Si l'enfant a besoin d'un comportement personnalisé, il peut remplacer n'importe quelle méthode parent en la redéfinissant avec le même nom. À l'intérieur d'une méthode remplacée, vous pouvez toujours invoquer l'implémentation du parent en utilisant la fonction `super()` intégrée, garantissant ainsi que vous pouvez étendre plutôt que remplacer complètement la logique existante.

Contrairement à de nombreux langages typés statiquement, Python prend en charge nativement l'héritage multiple, ce qui signifie qu'une classe enfant peut hériter de plusieurs classes parent (par exemple, `class SmartDevice(Camera, Phone)) :`). Pour déterminer quelle méthode parent s'exécute en cas de conflit de noms, Python utilise un algorithme strict appelé Method Resolution Order (MRO). Comprendre comment structurer les arbres d'héritage et utiliser super() est crucial pour concevoir des architectures extensibles orientées objet.

Sortie de code et d'exécution

Création d'une classe Vehicle parent et d'une sous-classe Car enfant qui remplace l'initialisation à l'aide de super().

class Vehicle:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year

    def display_info(self):
        return f"{self.year} {self.brand}"

class Car(Vehicle):
    def __init__(self, brand, year, model):
        # Call parent constructor
        super().__init__(brand, year)
        self.model = model

    def display_info(self):
        # Override parent method and extend it
        parent_info = super().display_info()
        return f"{parent_info} {self.model}"

my_car = Car("Ford", 2026, "Mustang")
print(my_car.display_info())
Sortie terminale
2026 Ford Mustang

Mise en œuvre étape par étape

  • Création de classes d'exception personnalisées qui héritent d'Exception
  • Création de composants d'interface utilisateur (comme les boutons) héritant d'une vue générique
  • Définir des modèles de bases de données hiérarchiques (par exemple, utilisateur, employé, responsable)

Foire aux questions

Que fait super() dans le sous-classement ?

super() renvoie un objet temporaire de la classe parent, permettant d'appeler ses méthodes, ce qui est particulièrement utile pour initialiser les champs parents dans __init__.

Pouvez-vous empêcher l’héritage d’une classe ?

Python ne prend pas en charge un mot-clé « final » comme Java pour restreindre l'héritage. Conventionnellement, nous documentons l'intention de la classe ou utilisons des vérificateurs de type avec les annotations @final du module de saisie.

Sujets connexes

Ressources Python recommandées

Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.