Qu'est-ce qu'une classe abstraite en Python ?

Les classes abstraites en Python sont un concept fondamental dans la programmation orientée objet (POO) qui permet de définir des structures pour d'autres classes sans implémenter toutes leurs méthodes.

Elles sont utilisées pour créer un cadre sur lequel d’autres classes vont s’appuyer.

Elles sont essentielles lorsqu’on souhaite imposer certaines méthodes à toutes les classes dérivées, garantissant ainsi une certaine cohérence et structure dans le code.

À noter

En Python, les classes abstraites ne peuvent pas être instanciées directement, ce qui signifie qu'on ne peut pas créer d'objets de ces classes.

Au lieu de cela, elles servent de modèle pour les sous-classes, qui doivent implémenter toutes les méthodes abstraites de la classe abstraite mère pour pouvoir être instanciées.

Créer une classe abstraite

Pour créer une classe abstraite en Python, on utilise le module abc (Abstract Base Classes) qui fournit les mécanismes nécessaires pour définir les méthodes abstraites.

Une méthode devient abstraite quand elle est décorée avec le décorateur @abstractmethod.

Exemple simple d'utilisation des classes abstraites :

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def parler(self):
        pass

class Chien(Animal):
    def parler(self):
        return "Wouf Wouf"

class Chat(Animal):
    def parler(self):
        return "Miaou"

# Tentative d'instanciation de la classe abstraite
animal = Animal()  # Cela lèvera une erreur

# Utilisation des sous-classes
mon_chien = Chien()
mon_chat = Chat()

print(mon_chien.parler()) # Affichera "Wouf Wouf"
print(mon_chat.parler()) # Affichera "Miaou"

À noter

Dans cet exemple, la classe Animal est abstraite et définit une méthode abstraite parler.

Les classes Chien et Chat héritent de Animal et implémentent donc la méthode parler().

L'instanciation directe de la classe Animal lèverait une erreur car il s'agit d'une classe abstraite, tandis que créer des objets à partir des sous-classes Chien et Chat est possible car ces dernières ont fourni une implémentation concrète de la méthode abstraite.

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def parler(self):
        pass

class Chien(Animal):
    def parler(self):
        return "Wouf Wouf"

class Chat(Animal):
    pass

mon_chat = Chat()
mon_chat.parler()  # TypeError: Can't instantiate abstract class Chat without an implementation for abstract method 'parler'

Mais alors, à quoi ça sert ? 🤔

L'utilité des classes abstraites réside dans leur capacité à définir un contrat pour les sous-classes, forçant l'implémentation de méthodes spécifiques tout en permettant l'élaboration de logiques complexes dans un environnement structuré et cohérent.

Bravo, tu es prêt à passer à la suite

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.