CodeGym /Cours /Python SELF FR /Décorateurs

Décorateurs

Python SELF FR
Niveau 14 , Leçon 1
Disponible

5.1 Introduction aux décorateurs

Les décorateurs sont des fonctions qui prennent une autre fonction en tant qu'argument et renvoient une nouvelle fonction, modifiant ou étendant le comportement de la fonction d'origine. Les décorateurs sont utilisés pour améliorer la lisibilité et la réutilisabilité du code.

Les décorateurs permettent de modifier le comportement des fonctions ou des méthodes sans changer leur code source. Par conséquent, ils sont largement utilisés pour ajouter des fonctionnalités, faire du logging, du contrôle d'accès et bien d'autres choses.

La syntaxe des décorateurs en Python utilise le symbole @ avant le nom du décorateur, qui est placé avant la définition de la fonction.


@decorator
def my_function():
    pass

C'est équivalent au code suivant :


def my_function():
    pass
        
my_function = decorator(my_function)

Réfléchissez bien à ce qui se passe ici : nous déclarons la fonction my_function, mais ensuite nous la remplaçons par la fonction decorator, où notre fonction est passée en paramètre. La fonction decorator peut appeler notre fonction à sa guise.

5.2 Création d'un simple décorateur

Regardons un simple décorateur qui affiche un message avant et après l'appel de la fonction.


def my_decorator(func):
    def wrapper():
        print("Avant l'appel de la fonction")
        func()
        print("Après l'appel de la fonction")

    return wrapper
        
@my_decorator
def say_hello():
    print("Hello!")
        
say_hello()

Explication

Le décorateur (my_decorator): Cette fonction prend la fonction func en tant qu'argument et renvoie une nouvelle fonction wrapper, qui appelle func et ajoute un comportement supplémentaire avant et après son appel.

La fonction avec le décorateur (say_hello): La fonction say_hello est enveloppée par le décorateur my_decorator, ce qui ajoute un comportement supplémentaire lors de son appel.

Sortie :


# Avant l'appel de la fonction
Hello!
# Après l'appel de la fonction

5.3 Décorateurs avec des arguments

Les décorateurs peuvent accepter des arguments, ce qui permet de configurer leur comportement de manière flexible.


def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                func(*args, **kwargs)

        return wrapper
        
    return decorator_repeat
        
@repeat(num_times=3)
def say_hello(name):
    print(f"Hello, {name}!")
        
say_hello("Alice")

Explication

Le décorateur avec arguments (repeat): Cette fonction accepte l'argument num_times et renvoie le décorateur decorator_repeat.

Le décorateur (decorator_repeat): Ce décorateur prend la fonction func et renvoie une nouvelle fonction wrapper, qui appelle func num_times fois.

La fonction avec le décorateur (say_hello): La fonction say_hello est appelée trois fois grâce au décorateur repeat.

Sortie :


Hello, Alice!
Hello, Alice!
Hello, Alice!
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION