这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowcanIprogrammaticallychangetheargspecofafunctioninapythondecorator?argspec是获取函数参数的好方法,但当函数被修饰时它不起作用:defdec(func):@wraps(func)defwrapper(*a,**k)returnfunc()returnwrapper@decdeff(arg1,arg2,arg3=SOME_VALUE):returnimportinspectprintinspect.argspec(f)---------
我正在玩Python可调用。基本上你可以定义一个python类并实现__call__方法来使这个类的实例可调用。例如,classAwesomeFunction(object):def__call__(self,a,b):returna+b模块inspect有一个函数getargspec,它给你一个函数的参数说明。但是,我似乎不能在可调用对象上使用它:fn=AwesomeFunction()importinspectinspect.getargspec(fn)不幸的是,我遇到了类型错误:Traceback(mostrecentcalllast):File"",line1,inFile"/
给定一个函数:deffunc(f1,kw='default'):passbare_argspec=inspect.getargspec(func)@decoratordeffunc2(f1,kw='default'):passdecorated_argspec=inspect.getargspec(func2)我如何创建一个装饰器使得bare_argspec==decorated_argspec?(至于为什么,调用装饰函数的框架会进行argspec检查以选择要传入的内容,因此装饰器必须保留相同的argspec才能玩得很好。当我在#python上提出这个问题时,我有一篇关于为什么框架很糟