Я написал этот декоратор для устаревания функции и (опционально) для обеспечения возможности вызова в качестве замены
def deprecated(repfun=None):
"""A decorator which can be used to mark functions as deprecated.
Optional repfun is a callable that will be called with the same args
as the decorated function.
"""
def outer(fun):
def inner(*args, **kwargs):
msg = "%s is deprecated" % fun.__name__
if repfun is not None:
msg += "; use %s instead" % (repfun.__name__)
warnings.warn(msg, category=DeprecationWarning, stacklevel=2)
if repfun is not None:
return repfun(*args, **kwargs)
else:
return fun(*args, **kwargs)
return inner
return outer
Теперь я могу использовать свой декоратор как таковой:
@deprecated()
def foo():
return 0
... или укажите необязательный аргумент:
@deprecated(some_function)
def foo():
return 0
... но я не знаю, как изменить его так, чтобы я мог опустить скобки:
@deprecated
def foo():
return 0
Любая подсказка?