Вам нужна трехуровневая структура: фабрика декораторов -> декоратор -> обертка.
Пример
from functools import wraps
def retry(times: int):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
for _ in range(times - 1):
try:
return func(*args, **kwargs)
except Exception:
pass
return func(*args, **kwargs)
return wrapper
return decorator
Разбор
Суммируя:
- Параметризованный декоратор — это функция, которая возвращает декоратор.
- Замыкание часто используется для сохранения параметров.
- Этот подход удобен для настраиваемого поведения.
Итог
Вам нужна трехуровневая структура: фабрика декораторов -> декоратор -> обертка.