Décorateurs avec Paramètres
Les décorateurs avec paramètres en Python sont une fonctionnalité avancée qui vous permet de passer des arguments supplémentaires à vos décorateurs, augmentant ainsi leur flexibilité. Voici un exemple pratique pour illustrer ce concept :
Structure de base d'un décorateur
Tout d'abord, commençons par une structure de décorateur de base :
123456789101112def simple_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper @simple_decorator def say_hello(): print("Hello!") say_hello()
Dans cet exemple, simple_decorator est un décorateur régulier qui modifie le comportement de la fonction say_hello.
Décorateur avec Paramètres
Maintenant, créons un décorateur qui accepte des paramètres :
12345678910111213def decorator_with_args(arg1, arg2): def decorator(func): def wrapper(*args, **kwargs): print(f"Decorator args: {arg1}, {arg2}") return func(*args, **kwargs) return wrapper return decorator @decorator_with_args("hello", 42) def print_numbers(a, b): print(a + b) print_numbers(10, 5)
Dans cet exemple, decorator_with_args
est une fabrique de décorateurs qui accepte des paramètres (arg1, arg2) et retourne le décorateur réel (decorator). La fonction wrapper est celle qui modifie le comportement de la fonction décorée (print_numbers).
Explication
decorator_with_args
est appelé avec ses arguments("hello", 42)
;- Il retourne la fonction
decorator
; decorator
prend une fonctionprint_numbers
et retourne la fonctionwrapper
;wrapper
a accès à la fois aux arguments dedecorator_with_args
et aux arguments deprint_numbers
.
Cette structure permet une plus grande flexibilité et réutilisabilité des décorateurs, car vous pouvez passer des arguments personnalisés pour modifier leur comportement.
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
Can you explain how decorators with parameters differ from regular decorators?
Can you show more examples of practical uses for decorators with parameters?
Can you explain what happens if I pass different types of arguments to the decorator?
Awesome!
Completion rate improved to 3.7
Décorateurs avec Paramètres
Glissez pour afficher le menu
Les décorateurs avec paramètres en Python sont une fonctionnalité avancée qui vous permet de passer des arguments supplémentaires à vos décorateurs, augmentant ainsi leur flexibilité. Voici un exemple pratique pour illustrer ce concept :
Structure de base d'un décorateur
Tout d'abord, commençons par une structure de décorateur de base :
123456789101112def simple_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper @simple_decorator def say_hello(): print("Hello!") say_hello()
Dans cet exemple, simple_decorator est un décorateur régulier qui modifie le comportement de la fonction say_hello.
Décorateur avec Paramètres
Maintenant, créons un décorateur qui accepte des paramètres :
12345678910111213def decorator_with_args(arg1, arg2): def decorator(func): def wrapper(*args, **kwargs): print(f"Decorator args: {arg1}, {arg2}") return func(*args, **kwargs) return wrapper return decorator @decorator_with_args("hello", 42) def print_numbers(a, b): print(a + b) print_numbers(10, 5)
Dans cet exemple, decorator_with_args
est une fabrique de décorateurs qui accepte des paramètres (arg1, arg2) et retourne le décorateur réel (decorator). La fonction wrapper est celle qui modifie le comportement de la fonction décorée (print_numbers).
Explication
decorator_with_args
est appelé avec ses arguments("hello", 42)
;- Il retourne la fonction
decorator
; decorator
prend une fonctionprint_numbers
et retourne la fonctionwrapper
;wrapper
a accès à la fois aux arguments dedecorator_with_args
et aux arguments deprint_numbers
.
Cette structure permet une plus grande flexibilité et réutilisabilité des décorateurs, car vous pouvez passer des arguments personnalisés pour modifier leur comportement.
Merci pour vos commentaires !