如果我做以下事情
def mydecorator(f):
def wrapper(*args, **kwargs):
f(*args, **kwargs)
wrapper.__doc__ = f.__doc__
wrapper.__name__ = f.__name__
return wrapper
@mydecorator
def myfunction(a,b,c):
'''My docstring'''
pass
然后输入 help myfunction
,我得到:
Help on function myfunction in module __main__:
myfunction(*args, **kwargs)
My docstring
因此,名称和文档字符串被正确复制。在这种情况下,是否还有一种方法可以复制实际的呼叫签名 (a, b, c)
?
这是一个使用Michele Simionato的例子 装饰模块 修复签名:
import decorator
@decorator.decorator
def mydecorator(f,*args, **kwargs):
return f(*args, **kwargs)
@mydecorator
def myfunction(a,b,c):
'''My docstring'''
pass
help(myfunction)
# Help on function myfunction in module __main__:
# myfunction(a, b, c)
# My docstring
这是一个使用Michele Simionato的例子 装饰模块 修复签名:
import decorator
@decorator.decorator
def mydecorator(f,*args, **kwargs):
return f(*args, **kwargs)
@mydecorator
def myfunction(a,b,c):
'''My docstring'''
pass
help(myfunction)
# Help on function myfunction in module __main__:
# myfunction(a, b, c)
# My docstring
此功能由Python标准库提供 检查模块,特别是inspect.getargspec。
>>> import inspect
>>> def f(a, b, c=0, *args, **kwargs): return
...
>>> inspect.getargspec(f)
ArgSpec(args=['a', 'b', 'c'], varargs='args', keywords='kwargs', defaults=(0,))