Python для профессионаловОткрытые материалыДекораторы в Python: функции, @ и параметры

Декораторы в Python: функции, @ и параметры

Уроки курсаДекораторы в Python: функции, @ и параметры

Декоратор с параметрами

Если у декоратора есть настройка, появляется ещё один уровень функции — фабрика декораторов.

from functools import wraps

def repeat(times: int):
    if times < 1:
        raise ValueError("times must be positive")

    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            result = None
            for _ in range(times):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

Теперь @repeat(3) сначала вызывает фабрику, получает декоратор и только затем оборачивает функцию. Не прячьте в декоратор критичное поведение без явного имени: транзакции, retry и авторизация должны оставаться наблюдаемыми и тестируемыми.

Декораторы в Python: функции, @ и параметры — Python для профессионалов — Latorn