Enchaînement et empilement de décorateurs
Glissez pour afficher le menu
Lors de l'utilisation des décorateurs en Python, il est souvent nécessaire d'appliquer plusieurs décorateurs à une même fonction. Cela s'appelle empiler ou enchaîner des décorateurs. Pour empiler des décorateurs, il suffit de placer plusieurs lignes de décorateur, l'une après l'autre, directement au-dessus de la définition de la fonction. L'ordre dans lequel les décorateurs sont empilés est important, car il influence la manière dont la fonction est enveloppée et la façon dont chaque décorateur interagit avec les autres. Le décorateur le plus proche de la fonction est appliqué en premier, et chaque décorateur suivant enveloppe le résultat du précédent. Ainsi, le décorateur situé en haut de la pile constitue l'enveloppe la plus externe, tandis que celui le plus proche de la fonction est l'enveloppe la plus interne.
L'exemple ci-dessous définit deux décorateurs, decorator_one et decorator_two, empilés au-dessus d'une fonction appelée greet. L'ordre d'empilement détermine la manière dont les décorateurs sont appliqués.
123456789101112131415161718192021222324252627# Prints messages before and after the function call def decorator_one(func): def wrapper(*args, **kwargs): print("Decorator One: Before") result = func(*args, **kwargs) print("Decorator One: After") return result return wrapper # Also prints messages before and after the function call def decorator_two(func): def wrapper(*args, **kwargs): print("Decorator Two: Before") result = func(*args, **kwargs) print("Decorator Two: After") return result return wrapper # Stacking decorators # decorator_two is applied first (innermost), # then decorator_one wraps the result (outermost) @decorator_one @decorator_two def greet(name): print(f"Hello, {name}!") greet("Alice")
Remarquez que decorator_two est appliqué d'abord à greet, puis decorator_one enveloppe le résultat. Cela signifie que le décorateur le plus proche de la fonction est le plus interne, et celui du dessus est le plus externe. L'ordre d'empilement est important, car il influence le comportement de votre fonction décorée.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion