Зміст курсу
Середній Рівень Python: Аргументи, Генератори та Декоратори
Середній Рівень Python: Аргументи, Генератори та Декоратори
Декоратори з Параметрами
Декоратори з параметрами у Python - це просунута функція, яка дозволяє передавати додаткові аргументи до ваших декораторів, підвищуючи їхню гнучкість. Ось практичний приклад, який ілюструє цю концепцію:
Базова структура декоратора
Почнемо з базової структури декоратора:
def 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()
У цьому прикладі simple_decorator - це регулярний декоратор, який змінює поведінку функції say_hello.
Декоратор з параметрами
Тепер давайте створимо декоратор, який приймає параметри:
def 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)
У цьому прикладі decorator_with_args
- це фабрика декораторів, яка приймає параметри (arg1, arg2) і повертає власне декоратор (decorator
). Функція обгортка wrapper
- це функція, яка модифікує поведінку обгорнутої функції (print_numbers
).
Пояснення
- Викликається
decorator_with_args
з аргументами("hello", 42)
; - Повертає функцію
decorator
; decorator
отримує функціюprint_numbers
і повертає функціюwrapper
;- Функція
wrapper
має доступ як до аргументів функціїdecorator_with_args
, так і до аргументів функціїprint_numbers
.
Така структура забезпечує більшу гнучкість і можливість повторного використання декораторів, оскільки ви можете передавати власні аргументи для зміни їхньої поведінки.
Дякуємо за ваш відгук!