Декораторы в Python — это мощный инструмент, который позволяет изменять поведение функций или классов без изменения их исходного кода. Они широко используются для добавления новых функциональностей, таких как логирование, кеширование или проверка доступа. В этой статье мы рассмотрим, как создать и использовать декораторы в Python.
Создание декоратора
Декоратор — это функция, которая принимает другую функцию в качестве аргумента и возвращает новую функцию, обычно с измененным поведением. Вот пример простого декоратора, который выводит сообщение перед и после выполнения функции:
def simple_decorator(func):
def wrapper():
print("Действие перед выполнением функции")
func()
print("Действие после выполнения функции")
return wrapper
def my_function():
print("Это моя функция")
decorated_function = simple_decorator(my_function)
decorated_function()
Вывод:
Действие перед выполнением функции
Это моя функция
Действие после выполнения функции
Использование декоратора с синтаксисом @
Python предоставляет специальный синтаксис для применения декораторов к функциям или классам, используя символ @. Вот пример использования нашего декоратора с помощью этого синтаксиса:
@simple_decorator
def my_function():
print("Это моя функция")
my_function()
Вывод будет таким же, как и в предыдущем примере.
Декораторы с аргументами функции
Чтобы создать декоратор, который может работать с функциями, принимающими аргументы, используйте *args и **kwargs в определении обертывающей функции:
def decorator_with_arguments(func):
def wrapper(*args, **kwargs):
print("Действие перед выполнением функции")
result = func(*args, **kwargs)
print("Действие после выполнения функции")
return result
return wrapper
@decorator_with_arguments
def my_function_with_args(a, b):
print(f"Сумма {a} и {b} равна {a + b}")
my_function_with_args(1, 2)
Вывод:
Действие перед выполнением функции
Сумма 1 и 2 равна 3
Действие после выполнения функции
Использование нескольких декораторов
Вы можете применить несколько декораторов к одной функции, просто написав их один под другим:
def another_decorator(func):
def wrapper(*args, **kwargs):
print("Другой декоратор")
return func(*args, **kwargs)
return wrapper
@simple_decorator
@another_decorator
def my_function():
print("Это моя функция")
my_function()
Вывод:
Действие перед выполнением функции
Другой декоратор
Это моя функция
Действие после выполнения функции
Обратите внимание, что порядок декораторов имеет значение, и они применяются снизу вверх.
Заключение
Теперь вы знаете основы создания и использования декораторов в Python. Они могут быть очень полезными для оптимизации кода и добавления дополнительной функциональности без изменения существующих функций или классов. Не забывайте экспериментировать и создавать свои собственные декораторы! 😊
Перейти в телеграм, чтобы получить результаты теста





Забрать
Добавить комментарий