Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python类方法的属性问题_Python - Fatal编程技术网

python类方法的属性问题

python类方法的属性问题,python,Python,我只是好奇为什么我不能在“fn”方法中更改属性的值 本质上,它是 test.fn.f和self.fn.f之间有什么区别?我确信修改函数的属性值是可以的,但为什么我可以在方法中这样做呢 不能将任意属性指定给instancemethod。赋值在类主体中起作用,因为此时它仍然是一个函数;在块末尾创建类之前,它不会成为实例方法。发生的情况如下: fn.f=1赋予函数本身一个属性 但是在使用test.fn和self.fn进行访问时,您不会得到函数本身,而是得到一个instancemethod。为什么?因为

我只是好奇为什么我不能在“fn”方法中更改属性的值

本质上,它是


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