首页 > 解决方案 > __setattr__ 和 __dict__ 之间的区别

问题描述

如果我想为一个实例设置一个属性:</p>

我可以使用__setattr__(key, value) self.__dict__[key]=value

我想知道如何__setattr__工作,如果__setattr__只是设置 k,v in __dict__,两种方式有什么区别?setattr的存在是什么意思?</p>

标签: pythonpython-3.x

解决方案


while__dict__是一个包含所有内部变量的内部字典,__setattr__实际上是一个在您尝试设置属性时始终调用的方法,因此,您可以拦截这些操作并采取相应措施。

示例代码可以帮助您理解其中的区别:

class Foo:
    def __setattr__(self, key, value):
        print(f'Setting {key} to {value}')
        self.__dict__[key] = value

f = Foo()
f.__dict__['test'] = 1
f.__setattr__('test', 2)
f.test = 3

输出将是:

Setting test to 2
Setting test to 3

原因是通过访问__dict__,您是直接访问内部对象字典并且该__setattr__方法被跳过。


推荐阅读