我创建了一个装饰工厂,它由自定义日志记录功能参数化,如下所示:
def _log_error(logger):
def decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
try:
return f(*args, **kwargs)
except Exception as e:
logger(e)
return None
return wrapper
return decorator
我现在想用它来装饰部分应用的函数foo:
foo = partial(bar, someparam)
我已经尝试了以下所有方法:
@_log_error(logger)
foo = partial(bar, someparam)
log_error = _log_error(logger)
@log_error
foo = partial(...)
foo = partial(...)
@log_error
foo
@log_error
(foo = partial(...))
AFAICT log_error = _log_error(logger) / @log_error
和@_log_error(logger)
似乎都是生成装饰器的完全有效的方法,它在正常声明的函数上工作正常。但是当尝试使用部分应用的函数时,我在foo =
的开头得到了语法错误,并且在使用装饰器时获得了很好的资源,而functools.partial
通常没有给我任何关于此特定内容的信息。情况下。
答案 0 :(得分:5)
装饰师不参与作业。但是因为使用装饰器与调用装饰器是一样的,所以你可以做到
foo = _log_error(logger)(partial(bar, someparam))