关于python类方法的属性的问题

时间:2012-06-01 08:24:34

标签: python

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.fself.fn.f之间有什么区别?我确定可以修改函数的属性值,但为什么我可以在方法中做到这一点?

2 个答案:

答案 0 :(得分:4)

以下是:

fn.f = 1为函数本身提供了一个属性。

但是在使用test.fnself.fn进行访问时,您不会获得该功能,而是instancemethod。为什么?因为在类中的属性访问时,如果有任何组件的__get__方法被调用。在函数的情况下,就是这种情况。

如果调用函数的__get__方法,则将其转换为绑定或未绑定的实例方法,该方法只是函数的包装器。

你可以用

解决这个问题
test.fn.im_func.f = 1
self.fn.im_func.f = 1

答案 1 :(得分:1)

您无法将任意属性分配给instancemethod。赋值在类体内工作,因为它在那时仍然是function;在块结束时创建类之前,它不会成为instancemethod