__setattr__和__dict__之间的区别

如果我想为实例设置一个属性?

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

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

回答

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__跳过了该方法。


以上是__setattr__和__dict__之间的区别的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>