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

标签 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 有什么区别?我确定修改函数的属性值没问题,但为什么我可以在方法中这样做?

最佳答案

接下来会发生什么:

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

但是在使用 test.fnself.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/

相关文章:

python - 在 virtualenv 中使用 dev_appserver.py 时导入错误

python - factory_boy 对象似乎缺少主键

python - 字典赋值是否导致指向 Python 中的同一个对象?

python - 从js QWebEngineView获取变量到python

python - Django 查询明确列出字段值的计数

python - 在 Tensorflow 中的 MNIST 上训练具有一个隐藏层的全连接网络

python - 防止 Sympy 重新排列等式

python - 使用分发/设置工具创建符号链接(symbolic link)(或运行脚本)?

python - Pip: ImportError: 入口 pip ('console_scripts' , 'pip' ) 未找到

python -/usr/bin/python : No module named barista. __main__; 'barista'是一个包,不能直接执行