我该如何在类定义中引用类对象?你能告诉我如何做吗?更具体地说,你如何在类方法的装饰器中传递类对象? 这里有一个简单的例子,我正在尝试将我声明的第二个方法传递给第一个方法的装饰器。
def decorate(w):
def _wrap(f):
def _call(*args, **kwargs):
return w(f(*args, **kwargs))
def _call
return _wrap
class A():
@dec(A.w)
def f():
return 2
def w(f):
return fr + 5
如预期的一样,抛出了异常。
NameError: name 'A' is not defined
作为我的调查结果,我发现在
decorate
或_wrap
函数内部,globals()
不包含A
键,而是在_call
内定义。因此,我可能可以通过字符串名称(例如@dec('A.w')
)找到传递的方法,但在这种情况下,无法在_wrap
闭包中缓存方法搜索。那么如何解决这个问题呢? :)
f
时,w
不存在,因为在文件中w
在f
之后。如果您将w
移到前面,则可以通过使用@dec(w)
来使其可能工作。 - BrenBarn