【发布时间】:2014-12-22 12:34:42
【问题描述】:
我一直在使用 python-aspectlib 为某些方法编织一个方面 - 不幸的是,这会将方法签名更改为 Argspec(args=[], varargs='args', keywords='kwargs', default=None),这在使用依赖于 inspect 返回正确签名的库时会产生问题.
有没有办法在不改变方法签名的情况下使用 python-aspectlib?如果没有,是否有其他 python 方面库可以做到这一点?
我查看了装饰器模块,其中明确提到了更改方法签名的问题:http://micheles.googlecode.com/hg/decorator/documentation.html#statement-of-the-problem,但我希望找到一个不需要修改我想要编织的方法的解决方案(因为它们是第三方库的一部分)。
我正在使用 python 2.7.6
【问题讨论】:
-
如果
aspectlib是一个开源库;提交一个可以保留函数签名的补丁。相关:How you implemented your Python decorator is wrong -
在 Python 3.3 之前,您必须使用
eval()来设置正确的函数签名(就像decorator模块所做的那样)。在 Python 3.3+ 中,wrapper.__signature__被明确支持,see PEP 362。 -
当您需要自己实现时,这可能会有所帮助:stackoverflow.com/questions/23973783/…
-
aspectlib 是一个开源库 - 不幸的是,我的 Python 知识(还)还不足以理解他们在做什么(或实际修补它)。感谢您的链接,它们非常有帮助。
标签: python python-2.7 decorator aop