class test :
def fn(self, i):
#test.fn.f = 0 the "compiler" show "not define" errors
#self.fn.f = 0 the "compiler" show "not define" errors
return test.fn.f #ok
return self.fn.f #ok
fn.f = 1
p = test()
print p.fn(1)
我很好奇为什么我不能在“fn”方法中改变一个属性的值
本质上,它是...
test.fn.f
和 self.fn.f
有什么区别?我确定修改函数的属性值没问题,但为什么我可以在方法中这样做?
最佳答案
接下来会发生什么:
fn.f = 1
给函数本身一个属性。
但是在使用 test.fn
和 self.fn
访问时,您不会获得函数本身,而是一个 instancemethod
。为什么?因为在类中访问属性时,组件的 __get__
方法会被调用(如果有的话)。在函数的情况下,就是这种情况。
如果您调用一个函数的 __get__
方法,您会将它变成一个绑定(bind)或未绑定(bind)的实例方法,它只是函数的包装器。
你可以用
test.fn.im_func.f = 1
self.fn.im_func.f = 1
关于python - 关于python类方法的属性的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10846837/