python类方法的属性问题
我只是好奇为什么我不能在“fn”方法中更改属性的值 本质上,它是python类方法的属性问题,python,Python,我只是好奇为什么我不能在“fn”方法中更改属性的值 本质上,它是 test.fn.f和self.fn.f之间有什么区别?我确信修改函数的属性值是可以的,但为什么我可以在方法中这样做呢 不能将任意属性指定给instancemethod。赋值在类主体中起作用,因为此时它仍然是一个函数;在块末尾创建类之前,它不会成为实例方法。发生的情况如下: fn.f=1赋予函数本身一个属性 但是在使用test.fn和self.fn进行访问时,您不会得到函数本身,而是得到一个instancemethod。为什么?因为
test.fn.f
和self.fn.f
之间有什么区别?我确信修改函数的属性值是可以的,但为什么我可以在方法中这样做呢 不能将任意属性指定给instancemethod
。赋值在类主体中起作用,因为此时它仍然是一个函数
;在块末尾创建类之前,它不会成为实例方法。发生的情况如下:
fn.f=1
赋予函数本身一个属性
但是在使用test.fn
和self.fn
进行访问时,您不会得到函数本身,而是得到一个instancemethod
。为什么?因为在类中进行属性访问时,如果存在组件的\uuuu get\uuuu
方法,则会调用该组件的\uuu get\uuuuu>方法。就函数而言,情况就是这样
如果调用函数的\uuuu get\uuuu
方法,则将其转换为绑定或未绑定实例方法,该方法只是函数的包装器
你可以用电脑来处理
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)
我不明白你的意思,你能举个例子吗?
test.fn.im_func.f = 1
self.fn.im_func.f = 1