Что такое декоратор в Python?

«Что такое декоратор в Python?» — вопрос из категории Python, который задают на 46% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Декоратор в Python — это функция, которая принимает другую функцию в качестве аргумента, расширяет её поведение и возвращает новую, обёрнутую функцию. Это мощный паттерн для добавления сквозной функциональности (например, логирование, кеширование, проверка прав) без изменения исходного кода целевой функции.

Пример простого декоратора для логирования:

def logger(func):
    def wrapper(*args, **kwargs):
        print(f'Вызов функции {func.__name__} с аргументами: {args}, {kwargs}')
        result = func(*args, **kwargs)
        print(f'Функция {func.__name__} вернула: {result}')
        return result
    return wrapper

@logger
def add(a, b):
    return a + b

# Вызов обёрнутой функции
add(5, 3)
# Вывод:
# Вызов функции add с аргументами: (5, 3), {}
# Функция add вернула: 8

Синтаксис @decorator — это просто «синтаксический сахар» для add = logger(add). Для сохранения метаданных исходной функции (например, __name__) рекомендуется использовать functools.wraps.