Accéder au contenu principal

Classes abstraites Python : Un guide complet avec des exemples

Découvrez les classes abstraites Python, leur utilité et comment utiliser le module `abc` pour garantir la cohérence des interfaces. Comprend des exemples pratiques et des bonnes pratiques pour une mise en œuvre efficace.
Actualisé 8 sept. 2025  · 10 min de lecture

La programmation orientée objet (POO) est un élément essentiel du développement logiciel moderne. Elle permet aux programmeurs d'organiser le code de manière évolutive, modulaire et réutilisable. Les classes abstraites constituent l'un des nombreux concepts de la programmation orientée objet qui sont essentiels pour créer un modèle pouvant être utilisé par d'autres classes. Cet article explique les classes abstraites, leurs avantages et comment utiliser le module abc de Python pour les créer avec succès.

Si vous débutez avec Python, notre cursus de compétences vous permettra d'apprendre à utiliser les modules et les paquets, à travailler avec les types de données intégrés et à écrire des fonctions personnalisées

Qu'est-ce qu'une classe abstraite ?

Une classe abstraite est comparable à un modèle pour d'autres classes. Il définit les méthodes qui doivent être incluses dans toute classe qui en hérite, mais il ne fournit pas le code réel de ces méthodes.

Considérez cela comme une recette sans ingrédients spécifiques : ellevous indique les étapes à suivre, mais les détails dépendent de la sous-classe.

Exemple :

Supposons que vous développiez un programme pour calculer l'aire de différentes formes.

  1. Vous créez une classe abstraite appelée Shape qui stipule que chaque forme doit disposer d' une méthode area().
  2. Cependant, Shape ne précise pas comment fonctionne area(), car la formule dépend du type de forme.
  3. Chaque forme spécifique (telle que Circle ou Rectangle) hérite de Shape et fournit sa propre version de area().

Si vous souhaitez approfondir vos connaissances sur les concepts clés de Python, nous vous invitons à vous inscrire à notre cours de programmation orientée objet intermédiaire en Python

Pourquoi utiliser des classes abstraites en Python ?

Les classes abstraites sont utiles lorsque vous souhaitez :

  • Implémentation de la méthode enforce: Les méthodes d'une classe abstraite fonctionnent comme un contrat, exigeant que chaque sous-classe fournisse sa propre implémentation. Cela réduit le risque d'implémentations incohérentes ou manquantes en garantissant que des fonctionnalités spécifiques sont présentes dans toutes les classes dérivées.
  • Encouragez la réutilisation du code: les classes abstraites peuvent contenir à la fois des méthodes concrètes et abstraites. Les méthodes concrètes réduisent considérablement la duplication du code et favorisent les principes DRY (Do not Repeat Yourself) en fournissant des fonctionnalités partagées qui peuvent être héritées par toutes les sous-classes.
  • Améliorer la lisibilité et la maintenabilité: Les classes abstraites aident les développeurs à mieux appréhender la structure et les fonctionnalités du logiciel en fournissant un cadre cohérent et transparent. Cette structure facilite la maintenance du code en appliquant des principes de conception tels que la responsabilité unique et la séparation des responsabilités.
  • Encouragez le polymorphisme: Les classes abstraites permettent d'écrire du code général qui fonctionne efficacement avec diverses sous-classes. Grâce à cette flexibilité, les développeurs peuvent créer des fonctions ou des méthodes capables de gérer n'importe quelle sous-classe de la classe abstraite, ce qui augmente l'extensibilité du code et sa capacité d'adaptation aux changements futurs.

Vous pouvez vous assurer que toute sous-classe, telle que Dog ou Cat, implémente sa propre implémentation de la méthode speak, par exemple, si vous disposez d'une classe abstraite Animal avec une méthode abstraite speak. Grâce à cette uniformité, votre code devient fiable et prévisible.

Apprenez Python à partir de zéro

Maîtrisez Python pour la science des données et acquérez des compétences recherchées.
Commencez à apprendre gratuitement

Le module abc en Python

Le module abc de Python offre une prise en charge intégrée solide pour les classes abstraites. Le module, qui signifie « Abstract Base Classes » (classes de base abstraites), fournit aux programmeurs les outils nécessaires pour créer des classes abstraites, notamment le décorateur abstractmethod et la classe ABC. 

En définissant des méthodes abstraites et en exigeant leur implémentation dans les sous-classes, ces outils vous aident à maintenir l'uniformité et la conformité à une interface prédéterminée. En exigeant la mise en œuvre de méthodes essentielles dans toutes les classes dérivées et en autorisant la mise en œuvre partielle de fonctionnalités communes dans les classes de base abstraites, le module encourage également l'amélioration des modèles de conception. 

Pour cette raison, le module ABC est un composant essentiel pour l'organisation d'applications Python évolutives, robustes et stables.

Création d'une classe abstraite Python

Deux composants essentiels sont présentés dans le module ABC :

Classe de base abstraite, ou ABC

La classe ABC est une fonctionnalité intégrée à Python qui sert de base fondamentale pour le développement de classes abstraites. Il est nécessaire d'hériter de ABC pour définir une classe abstraite. La classe est abstraite et ne peut pas être instanciée directement, comme l'indique cet héritage. En servant de modèles, les classes abstraites garantissent que toute sous-classe concrète respecte un ensemble de règles.

Vous pouvez définir des méthodes abstraites à l'intérieur d'une classe abstraite en utilisant le décorateur abstractmethod. Toute sous-classe concrète doit implémenter et redéfinir les méthodes abstraites, qui sont des espaces réservés. Cela rend le code cohérent et prévisible en garantissant que toutes les classes dérivées offrent des fonctionnalités pour les méthodes désignées. Le décorateur abstractmethod est un outil utile pour exiger la mise en œuvre de méthodes tout en laissant aux sous-classes une certaine flexibilité dans la manière dont elles répondent à ces exigences.

Voici un exemple simple :

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

    @abstractmethod
    def perimeter(self):
        pass

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14159 * self.radius ** 2

    def perimeter(self):
        return 2 * 3.14159 * self.radius

# Uncommenting the following line will raise an error because we’re missing method implementations
# shape = Shape() # TypeError: Can't instantiate abstract class Shape with abstract methods #area, perimeter

circle = Circle(5)
print(f"Area: {circle.area()}")
print(f"Perimeter: {circle.perimeter()}")

# Area: 78.53975
# Perimeter: 31.4159

Si vous recherchez des projets Python plus pratiques, veuillez consulter notre liste des 60 meilleurs projets Python pour les développeurs de tous niveaux. 

Comment le module abc assure la mise en œuvre des méthodes

Toute sous-classe d'une classe abstraite est assurée d'implémenter les méthodes décorées grâce au décorateur ` abstractmethod `. Par mesure de précaution, cela empêche la création de sous-classes qui ne disposent pas des capacités requises. 

Python signale une exception « TypeError » lorsqu'une tentative d'instanciation d'une sous-classe est effectuée si celle-ci ne remplace pas toutes les méthodes abstraites. Cette application stricte réduit le risque de défauts et améliore la stabilité du code en aidant les développeurs à identifier rapidement les failles d'implémentation. 

Cela garantit également que toutes les sous-classes concrètes respectent le comportement et la conception prévus par la classe abstraite.

Par exemple :

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    # Missing area and perimeter implementation

# This will raise an error
rectangle = Rectangle(5, 10)

# TypeError: Can't instantiate abstract class Rectangle with abstract methods area, perimeter

Méthodes de classe abstraite en Python

En Python, la définition d'une classe abstraite implique l'utilisation du décorateur abstractmethod et la sous-classification à partir de ABC. En procédant ainsi, les programmeurs peuvent établir les bases pour d'autres classes en définissant les méthodes qui doivent être utilisées. 

Voici une procédure détaillée, étape par étape :

  • Veuillez intégrer les modules requis : Il est recommandé d'importer en premier lieu ABC et abstractmethod à partir du module ABC. Pour définir des classes et des méthodes abstraites, ces outils sont indispensables.
  • Veuillez créer une classe basée sur ABC: Veuillez créer une nouvelle classe et définir ABC comme son héritier. La classe est abstraite et ne peut pas être instanciée directement, comme l'indique cet héritage.
  • Définissez les méthodes abstraites à l'aide d'@abstractmethod: Pour spécifier les méthodes que les sous-classes doivent redéfinir, veuillez utiliser le décorateur @abstractmethod. En substance, ces méthodes servent de substituts, garantissant que toutes les classes dérivées effectuent les opérations nécessaires.

Exemple étape par étape de définition d'une classe abstraite

Voici un exemple concret pour illustrer cela :

from abc import ABC, abstractmethod

class Vehicle(ABC):
    @abstractmethod
    def start_engine(self):
        pass

    @abstractmethod
    def stop_engine(self):
        pass

class Car(Vehicle):
    def start_engine(self):
        print("Car engine started")

    def stop_engine(self):
        print("Car engine stopped")

# Instantiating the abstract class directly will raise an error
# vehicle = Vehicle()

car = Car()
car.start_engine()
car.stop_engine()

# Car engine started
# Car engine stopped

Cela garantit que les fonctions start_engine et stop_engine sont implémentées par toute sous-classe de Vehicle.

Exemple pratique : implémentation d'une classe abstraite

Veuillez examiner une illustration plus détaillée utilisant une classe d'Vehicle:

from abc import ABC, abstractmethod

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

    @abstractmethod
    def start_engine(self):
        pass

    @abstractmethod
    def stop_engine(self):
        pass

class Motorcycle(Vehicle):
    def start_engine(self):
        print(f"{self.brand} motorcycle engine started")

    def stop_engine(self):
        print(f"{self.brand} motorcycle engine stopped")

motorcycle = Motorcycle("Yamaha")
motorcycle.start_engine()
motorcycle.stop_engine()
# Yamaha motorcycle engine started
# Yamaha motorcycle engine stopped

Cela illustre comment les classes abstraites permettent une flexibilité d'implémentation tout en imposant une interface cohérente.

Exemple de classe de base abstraite Python

Maintenant que nous avons examiné comment les classes de base abstraites définissent un contrat pour les sous-classes, nous allons explorer comment les classes concrètes satisfont à ces exigences en implémentant toutes les méthodes abstraites.

Classe concrète héritant d'une classe abstraite

Une sous-classe qui implémente toutes les méthodes abstraites d'une classe abstraite est appelée une classe concrète. Cela indique que la classe concrète fournit des implémentations spécifiques pour toutes les méthodes nécessaires, remplissant ainsi le contrat établi par la classe abstraite. 

Par exemple :

from abc import ABC, abstractmethod

class Appliance(ABC):
    @abstractmethod
    def turn_on(self):
        pass

    @abstractmethod
    def turn_off(self):
        pass

class WashingMachine(Appliance):
    def turn_on(self):
        print("Washing machine is now ON")

    def turn_off(self):
        print("Washing machine is now OFF")

machine = WashingMachine()
machine.turn_on()
machine.turn_off()

# Washing machine is now ON
# Washing machine is now OFF

Création d'instances et application des règles

Python empêche l'instanciation immédiate d'une classe abstraite. Comme cela garantit que toute sous-classe générée à partir de la classe abstraite respectera le contrat nécessaire fourni par ses méthodes abstraites, il s'agit d'un aspect essentiel des classes abstraites. 

Par exemple, une exception TypeError sera levée si vous essayez d'instancier appliance = Appliance()

Cette restriction garantit que les classes abstraites ne servent que de modèles et ne peuvent pas être utilisées de manière abusive. Python permet la création d'instances d'WashingMachine tout en respectant le contrat spécifié dans Appliance en implémentant toutes les méthodes abstraites dans WashingMachine. En garantissant que chaque fonctionnalité spécifiée dans la classe abstraite est entièrement implémentée dans ses sous-classes concrètes, cette application améliore l'intégrité du code.

Propriétés abstraites et initialisation

Sur cette base, examinons plus en détail comment Python prend en charge les propriétés abstraites à l'aide des décorateurs @property et @abstractmethod, permettant aux développeurs de garantir la cohérence des attributs parallèlement aux méthodes.

Utilisation des propriétés abstraites en Python

Les classes abstraites peuvent spécifier des propriétés que les sous-classes doivent implémenter en plus des méthodes. Cette fonctionnalité permet aux développeurs d'imposer une interface uniforme pour les propriétés que les sous-classes doivent déclarer en plus des méthodes. 

Afin de garantir que chaque sous-classe fournisse son implémentation, les propriétés abstraites peuvent être spécifiées à l'aide du décorateur @property en combinaison avec @abstractmethod. Cette méthode est particulièrement utile lors de la création de classes qui nécessitent des attributs en lecture seule ou calculés, essentiels au fonctionnement de la classe.

Exemple : classe abstraite avec propriétés

Voici un exemple :

from abc import ABC, abstractmethod

class Animal(ABC):
    @property
    @abstractmethod
    def sound(self):
        pass

class Bird(Animal):
    @property
    def sound(self):
        return "Chirp"

bird = Bird()
print(bird.sound)

# Chirp

La condition de la classe abstraite Animal est remplie par la fonctionnalité sound de la classe Bird.

Quand utiliser les classes abstraites Python

Les classes abstraites sont particulièrement adaptées aux scénarios suivants :

  • Lors de la conception de frameworks ou de bibliothèques où un comportement particulier doit être appliqué, veuillez noter que: Dans les systèmes complexes, les classes abstraites peuvent établir un ensemble unifié de directives ou d'interfaces auxquelles toutes les sous-classes doivent se conformer, garantissant ainsi la cohérence et réduisant les erreurs.
  • Mise en œuvre d'API cohérentes entre les classes: Les développeurs peuvent garantir que toutes les classes dérivées offrent un moyen standardisé et prévisible de communiquer avec l'application ou la bibliothèque en définissant des méthodes abstraites.
  • Fournir un cadre de base pour une hiérarchie de classes: Une hiérarchie de classes apparentées peut être créée en utilisant des classes abstraites comme guide. En permettant la personnalisation dans les sous-classes et en autorisant les développeurs à déclarer des comportements et des caractéristiques partagés dans la classe abstraite, cette structure favorise la réutilisabilité et minimise la duplication.

Meilleures pratiques

Lorsqu'il est nécessaire d'établir un contrat précis pour les sous-classes, il est recommandé d'utiliser des classes abstraites. Les classes abstraites sont utiles lorsque vous devez appliquer une structure ou un comportement spécifique à plusieurs classes dérivées. Ils contribuent à garantir que chaque sous-classe respecte une conception standard, ce qui améliore la prévisibilité du code et facilite la maintenance.

Si chaque méthode peut avoir une implémentation par défaut, il est préférable de ne pas utiliser de classes abstraites. Dans certaines situations, une classe de base concrète peut constituer une meilleure option pour réduire la complexité tout en conservant la possibilité de réutiliser des fonctionnalités partagées.

Veuillez vous assurer que les classes abstraites sont claires et simples, ne définissant que les attributs et méthodes les plus importants. Il peut être difficile de créer et de maintenir une classe abstraite si elle comporte trop de critères. Concentrez-vous plutôt sur les aspects essentiels que les classes dérivées doivent posséder.

Conclusion

La boîte à outils OOP de Python comprend des classes abstraites, qui constituent un outil puissant permettant aux programmeurs de créer des programmes fiables et faciles à maintenir. Vous pouvez favoriser la clarté, la réutilisabilité et l'extensibilité de vos applications en définissant des classes abstraites et en imposant une interface uniforme à toutes les sous-classes à l'aide du module ABC. Il est possible d'écrire un code de meilleure qualité et plus fiable en implémentant des classes abstraites, quelle que soit la taille du système sur lequel vous travaillez.

Que vous conceviez des programmes orientés objet robustes, mettiez en œuvre des interfaces cohérentes ou créiez des applications évolutives, la maîtrise des classes abstraites Python améliore votre capacité à écrire du code efficace et facile à maintenir. Renforcez vos connaissances en Python dès aujourd'hui grâce à notre parcours complet sur les fondamentaux de Python. cursus de compétences Python Fundamentals.

Questions fréquentes sur les classes abstraites Python

Comment définit-on une méthode abstraite en Python ?

Une méthode abstraite est définie à l'aide du décorateur ` @abstractmethod ` du module ` abc `. Il sert de substitut et doit être remplacé par toute sous-classe.

Est-il possible d'instancier une classe abstraite en Python ?

Non, il n'est pas possible d'instancier directement une classe abstraite. Python générera une exception « TypeError » si vous tentez de créer un objet d'une classe abstraite.

Quel est l'objectif du module « abc » en Python ?

Le module abc fournit la classe ABC et le décorateur abstractmethod pour définir et appliquer des classes et des méthodes abstraites en Python.

Une classe abstraite peut-elle disposer de méthodes régulières (concrètes) ?

Oui, une classe abstraite peut contenir des méthodes concrètes avec implémentation. Ces méthodes peuvent être héritées et utilisées par les sous-classes.


Derrick Mwiti's photo
Author
Derrick Mwiti
Sujets

Meilleurs cours Python

Cursus

Principes de base des données en Python

0 min
Développez vos compétences en matière de données, découvrez comment manipuler et visualiser les données, et appliquez des analyses avancées pour prendre des décisions basées sur les données.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow
Apparenté

Didacticiel

30 astuces Python pour améliorer votre code, accompagnées d'exemples

Nous avons sélectionné 30 astuces Python intéressantes que vous pouvez utiliser pour améliorer votre code et développer vos compétences en Python.
Kurtis Pykes 's photo

Kurtis Pykes

Didacticiel

Méthode index() de Python expliquée à l'aide d'exemples

Découvrez comment utiliser la fonction index() de Python pour trouver la position d'éléments dans des listes.
Sejal Jaiswal's photo

Sejal Jaiswal

Didacticiel

Tableaux Python

Tableaux Python avec exemples de code. Découvrez comment créer et imprimer des tableaux à l'aide de Python NumPy dès aujourd'hui.
DataCamp Team's photo

DataCamp Team

Didacticiel

Comment diviser des listes en Python : Exemples de base et méthodes avancées

Apprenez à diviser des listes Python à l'aide de techniques telles que le découpage, les compréhensions de listes et itertools. Veuillez découvrir quand utiliser chaque méthode pour une gestion optimale des données.
Allan Ouko's photo

Allan Ouko

Didacticiel

Tutoriel sur les boucles Python

Tutoriel complet d'introduction aux boucles Python. Apprenez et pratiquez les boucles while et for, les boucles imbriquées, les mots-clés break et continue, la fonction range et bien plus encore.
Satyabrata Pal's photo

Satyabrata Pal

Didacticiel

Tutoriel sur la fonction range() en Python

Découvrez la fonction range() de Python et ses capacités à l'aide d'exemples.
Aditya Sharma's photo

Aditya Sharma

Voir plusVoir plus