python - __setattr__ 和 __dict__ 之间的区别
问题描述
如果我想为一个实例设置一个属性:</p>
我可以使用__setattr__(key, value)
或 self.__dict__[key]=value
我想知道如何__setattr__
工作,如果__setattr__
只是设置 k,v in __dict__
,两种方式有什么区别?setattr的存在是什么意思?</p>
解决方案
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__
方法被跳过。
推荐阅读
- r - Adding a list/vector to a dataframe in a loop
- javascript - difference between async array.map() and async npm package
- python - Creating a Nested XML document in Python
- c - 我无法使用 /proc/{pid}/fd/0 写入标准输入
- python - Mysql_exceptions.OperationalError: (1241, '操作数应包含 1 列')。我究竟做错了什么?
- javascript - 使用'&&'和'||'有什么区别 通过三元运算符('?'和':')?
- bash - Shell driver install with `ACCEPT_EULA=Y` error
- javascript - 如何在 networkD3 / d3Network 网络图中禁用鼠标悬停效果(GNU R 包)
- java - 为什么我的 Alexa Skills Kit 依赖项缺失?
- vba - 在 ActiveX 复选框上使用 MouseMove 创建工具提示