【发布时间】:2011-11-22 11:45:48
【问题描述】:
通常我会使用inspect.getargspec,但是如何获取已绑定方法的参数?
例如,我如何获取方法 'foo' 的参数名称,如下所示:
class Foo(object):
@memoized
def foo(self, arg1, arg2):
pass
注意 Foo().foo 是一个记忆对象,http://wiki.python.org/moin/PythonDecoratorLibrary#Memoize
这意味着它确实是一个 functools.partial 实例。
如何获取原始函数,或者以某种方式获取参数?
如果不能,这是否表明 PythonDecoratorLibrary 存在设计缺陷?
【问题讨论】:
-
我已经通过有效地编写自己的 Memoize 替换来解决这个问题,它允许我获得原始功能,但是这个问题仍然存在。
-
eryksun:我确实为部分添加了一个 _wrapped 属性,虽然这看起来很奇怪,因为它已经有一个 .func (这似乎是一个咖喱函数?),但是 'return self.func 代替如果 obj 为 None' 的部分内容是非常令人讨厌的。您能否将其作为“答案”输入,我可以接受。我使用的是 2.7.x,但是提到 python3 的 lru_cache 看起来像是我应该知道的,你能提供参考吗?
标签: python decorator introspection