Les décorateurs Python expliqués avec des exemples

Améliorez vos fonctions avec les décorateurs

Apprenez à étendre et à modifier le comportement de vos fonctions à l’aide des décorateurs Python. Ce tutoriel explique le concept, fournit des exemples pratiques et vous montre comment écrire vos propres décorateurs.

Programmation
Auteur·rice
Affiliation
Date de publication

5 février 2024

Modifié

9 mai 2025

Mots clés

Décorateurs Python, Les décorateurs en Python

Introduction

Les décorateurs Python sont un outil puissant qui vous permet d’étendre et de modifier le comportement des fonctions sans modifier leur code de façon permanente. Ils constituent un moyen propre et expressif d’ajouter des fonctionnalités à vos fonctions, ce qui rend votre code plus modulaire et plus facile à maintenir.

Dans ce tutoriel, nous expliquerons le concept des décorateurs, nous vous montrerons comment ils fonctionnent et nous vous fournirons des exemples pratiques pour vous aider à incorporer les décorateurs dans vos propres projets.



Qu’est-ce qu’un décorateur?

Un décorateur en Python est une fonction qui prend une autre fonction en argument, lui ajoute des fonctionnalités et renvoie une nouvelle fonction. Les décorateurs sont souvent utilisés pour:
- Logging: Enregistrement du moment où les fonctions sont appelées.
- Contrôle d’accès: Vérifier les permissions avant d’exécuter une fonction.
- Mise en cache : Stockage des résultats d’appels de fonctions coûteux.
- Timing: Mesure du temps d’exécution des fonctions.

Comment fonctionnent les décorateurs

Lorsque vous appliquez un décorateur à une fonction en utilisant la syntaxe @decorator_name, Python transmet la fonction décorée au décorateur. Le décorateur renvoie alors une nouvelle fonction qui améliore ou modifie le comportement de la fonction d’origine.

Exemple de décorateur de base

Vous trouverez ci-dessous un exemple simple qui montre comment créer et utiliser un décorateur pour ajouter un comportement avant et après un appel de fonction.

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Avant l'appel de la fonction")
        result = func(*args, **kwargs)
        print("Après l'appel de la fonction")
        return result
    return wrapper

@my_decorator
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("Alice")

Résultats:

Avant l'appel de la fonction
Bonjour, Alice!
Après l'appel de la fonction

Exemple avancé : Décorateur avec arguments

Les décorateurs peuvent également être conçus pour accepter des arguments, ce qui permet des modifications de comportement encore plus flexibles.

def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for i in range(n):
                print(f"Répéter les salutations {i+1}/{n}:")
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(3)
def greet(name):
    print(f"Hello, {name}!")

greet("Bob")

Résultats:

Répéter les salutations 1/3:
Bonjour, Bob!
Répéter les salutations 2/3:
Bonjour, Bob!
Répéter les salutations 3/3:
Bonjour, Bob!

Bonnes pratiques pour l’utilisation des décorateurs

  • Rester simple:
    Écrire de petits décorateurs ciblés qui font bien une chose.

  • Utiliser functools.wraps:
    Lorsque vous écrivez des décorateurs, utilisez functools.wraps pour préserver les métadonnées de la fonction d’origine.

    import functools
    
    def my_decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            print("Avant l'appel de la fonction")
            result = func(*args, **kwargs)
            print("Après l'appel de la fonction")
            return result
        return wrapper
  • Documenter vos décorateurs:
    Commenter et documenter clairement l’objectif et l’utilisation de chaque décorateur.

Conclusion

Les décorateurs en Python fournissent un moyen flexible et élégant de modifier le comportement des fonctions. En maîtrisant les décorateurs, vous pouvez écrire un code plus modulaire et réutilisable, améliorer les fonctionnalités sans dupliquer le code, et mettre en œuvre des préoccupations transversales telles que la journalisation et la gestion des erreurs de manière plus propre. Expérimentez avec les exemples fournis ici, et essayez de créer vos propres décorateurs pour voir comment ils peuvent simplifier vos tâches de codage.

Plus d’informations

Bon codage et bonne chance dans l’amélioration de vos fonctions avec les décorateurs!

Explorer d’autres articles

Note

Voici d’autres articles de la même catégorie pour vous aider à approfondir le sujet.

placeholder

placeholder
Aucun article correspondant
Retour au sommet

Réutilisation

Citation

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Les décorateurs Python expliqués avec des exemples},
  date = {2024-02-05},
  url = {https://www.datanovia.com/fr/learn/programming/python/advanced/decorators-explained.html},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
Kassambara, Alboukadel. 2024. “Les décorateurs Python expliqués avec des exemples.” February 5, 2024. https://www.datanovia.com/fr/learn/programming/python/advanced/decorators-explained.html.