Classes abstraites en Python
PARTIE 1 – LES DÉCORATEURS EN PYTHON
1️Qu’est-ce qu’un décorateur ?
Un décorateur est une fonction spéciale qui permet de modifier le comportement d’une autre
fonction ou méthode sans modifier son code.
En Python, un décorateur s’écrit avec le symbole :
@decorateur
2️Exemple simple de décorateur
def mon_decorateur(fonction):
def wrapper():
print("Avant l'exécution")
fonction()
print("Après l'exécution")
return wrapper
@mon_decorateur
def dire_bonjour():
print("Bonjour")
dire_bonjour()
Résultat :
Avant l'exécution
Bonjour
Après l'exécution
Le décorateur encapsule la fonction.
3️Pourquoi Python utilise des décorateurs ?
Ils permettent :
Validation
Sécurité
Journalisation (logs)
Contrôle d’accès
Contraintes techniques
@abstractmethod est un décorateur
PARTIE 2 – CLASSES ABSTRAITES
4️Définition d’une classe abstraite
Une classe abstraite est une classe :
Qui ne peut pas être instanciée
Qui définit des méthodes obligatoires
Qui sert de modèle (contrat)
En Python, on utilise le module abc :
from abc import ABC, abstractmethod
5️Pourquoi utiliser une classe abstraite ?
Avantages
Imposer une structure
Réduire les erreurs
Faciliter la maintenance
Favoriser le polymorphisme
Sécuriser l’architecture
Sans classe abstraite
Chaque développeur peut faire n’importe quoi
6️Structure minimale d’une classe abstraite
from abc import ABC, abstractmethod
class Exemple(ABC):
@abstractmethod
def ma_methode(self):
pass
Toute classe qui hérite de Exemple doit implémenter ma_methode .
PARTIE 3 – EXEMPLE GUIDÉ
7️Exemple : Système de paiement
Objectif
Forcer tous les moyens de paiement à implémenter payer() .
Classe abstraite
from abc import ABC, abstractmethod
class MoyenPaiement(ABC):
@abstractmethod
def payer(self, montant):
pass
Classes concrètes
class CarteBancaire(MoyenPaiement):
def payer(self, montant):
return f"Paiement de {montant} effectué par carte bancaire"
class MobileMoney(MoyenPaiement):
def payer(self, montant):
return f"Paiement de {montant} effectué via Mobile Money"
Utilisation
paiements = [
CarteBancaire(),
MobileMoney()
]
for p in paiements:
print([Link](100))
PARTIE 4 – TRAVAUX PRATIQUES (TP)
TP 1 – Formes géométriques (guidé)
Énoncé
1. Crée une classe abstraite Forme
2. Méthode abstraite calculer_aire
3. Implémente :
Rectangle
Triangle
Aide
Rectangle → longueur × largeur
Triangle → (base × hauteur) / 2
TP 2 – Employés (semi-guidé)
Énoncé
1. Classe abstraite Employe
2. Méthode abstraite calculer_salaire
3. Classes :
EmployeFixe
EmployeHoraire
Objectif
Calculer correctement les salaires selon le type d’employé.
TP 3 – Système de notifications (libre)
Énoncé
Créer un système de notification avec :
Notification (classe abstraite)
Méthode envoyer(message)
Implémentations :
Email
SMS
WhatsApp
PARTIE 5 – QUESTIONS DE COMPRÉHENSION
1. Pourquoi ne peut-on pas instancier une classe abstraite ?
2. À quoi sert @abstractmethod ?
3. Quelle erreur apparaît si une méthode abstraite n’est pas implémentée ?
4. Quelle différence entre classe abstraite et classe normale ?
PARTIE 6 – EXERCICE BONUS (AVANCÉ)
Défi
Créer un plugin system avec :
Classe abstraite Plugin
Méthode executer()
Plugins :
Export PDF
Export Excel
Export JSON
Conclusion
Une classe abstraite permet de forcer une architecture propre, tandis que les décorateurs
permettent de contrôler le comportement du code.