Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.
В Python декораторы — это способ изменения поведения функции или класса, они оборачивают функцию или класс, чтобы добавить новые функциональности. Например, с помощью декоратора можно добавить поведение для логирования в функцию, не изменяя саму функцию.
Пример декоратора:
def log_decorator(func): def wrapper(): print(f'Вызов функции: {func.__name__}') func() return wrapper @log_decorator def hello_world(): print("Hello, world!") hello_world()
В этом примере hello_world
обернута log_decorator
, который печатает имя функции перед ее вызовом. Однако, это ведет к некоторым проблемам. Если вы попробуете получить имя функции hello_world
после того, как она была декорирована, вы получите имя функции обертки, а не исходное имя функции.
print(hello_world.__name__) # Вывод: wrapper
Здесь вместо ожидаемого hello_world
выводится wrapper
. Это происходит потому, что hello_world
теперь ссылается на функцию wrapper
внутри log_decorator
.
Вот здесь на помощь приходит functools.wraps
. Это функция в Python, которая используется внутри декоратора перед внутренней обертывающей функцией. Она обновляет обертку для функции, чтобы она включала в себя имя декорируемой функции и ее документацию.
Вот пример использования functools.wraps
:
from functools import wraps def log_decorator(func): @wraps(func) def wrapper(): print(f'Вызов функции: {func.__name__}') func() return wrapper @log_decorator def hello_world(): print("Hello, world!") print(hello_world.__name__) # Вывод: hello_world
Теперь, когда мы печатаем hello_world.__name__
, мы получаем ожидаемое имя функции, даже если она была декорирована. Это делает functools.wraps
очень полезным при работе с декораторами в Python.
Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами в разработке для ответов на вопросы и разбора домашек.
Добавить комментарий