2
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?我确信修改函数的属性值是可以的,但为什么我可以在方法中做到这一点?

4

2 回答 2

4

会发生以下情况:

fn.f = 1给函数本身一个属性。

但是在使用test.fnand访问时self.fn,您不会得到函数本身,而是instancemethod. 为什么?因为在类中的属性访问中,__get__如果有任何组件的方法,就会调用该组件的方法。在函数的情况下,情况就是这样。

如果你调用一个函数的__get__方法,你把它变成一个绑定或未绑定的实例方法,它只是函数的一个包装器。

你可以应付

test.fn.im_func.f = 1
self.fn.im_func.f = 1
于 2012-06-01T08:45:07.673 回答
1

您不能将任意属性分配给instancemethod. 该作业在班级主体内有效,因为那时它仍然是 a functioninstancemethod在块的末尾创建类之前,它不会变成一个。

于 2012-06-01T08:40:21.873 回答