我正在尝试将here描述的时序装饰器应用于类中的方法而不是独立方法。该怎么做?
我收到此错误:
TypeError: unbound method wrapper() must be called with SomeClass instance as first argument (got float instance instead)
答案 0 :(得分:1)
修改
感谢您的评论,我想我知道问题是什么。这不起作用:
class A:
@timings
@classmethod
def a(cls, x):
print(x)
A.a(2)
正是因为你说的原因。 TypeError:必须使用A实例作为第一个参数调用unbound方法wrapper()(改为使用int实例)
但这样做:
class A:
@classmethod
@timings
def a(cls, x):
print(x)
A.a(2)
所以顺序很重要。我认为这里发生的事情是愚弄python处理绑定方法的方式:当python查看成员a时,它必须做出决定:
如果它获得常规函数,它将执行(1),并且@timings生成常规函数。
这是否解决了这个问题?