我的decorator是“闭包式”的;它在返回被修饰的函数之前做一些工作。你知道吗
借用这个著名的问题:Preserving signatures of decorated functions
def args_as_ints(f):
time.sleep(1) # hard at work
def g(*args, **kwargs):
args = [int(x) for x in args]
kwargs = dict((k, int(v)) for k, v in kwargs.items())
return f(*args, **kwargs)
return g
functools.wraps
在python2中不保留签名。你知道吗
from functools import wraps
def args_as_ints(f):
time.sleep(1) # hard at work
@wraps(f)
def g(*args, **kwargs):
args = [int(x) for x in args]
kwargs = dict((k, int(v)) for k, v in kwargs.items())
return f(*args, **kwargs)
return g
@args_as_ints
def funny_function(x, y, z=3):
"""Computes x*y + 2*z"""
return x*y + 2*z
help(funny_function)
演出
Help on function funny_function in module __main__:
funny_function(*args, **kwargs)
Computes x*y + 2*z
decorator
模块似乎不支持这种装饰器样式。你知道吗
您可以使用^{} 模块。你知道吗
请记住,} documentation 。总之,这里是用
wrapt
修饰符与标准python修饰符具有不同的接口。我强烈建议您阅读^{wrapt.decorator
实现装饰器的基本方法:请注意,我的实现完全忽略了
instance
参数,因此对于实例方法它无法正常工作。你知道吗但是,它确实保留了修饰函数的签名:
设法在这里找到答案:https://decorator.readthedocs.io/en/latest/tests.documentation.html#dealing-with-third-party-decorators
相关问题 更多 >
编程相关推荐