如果我像这样创建一个类实例
class MyClass(object):
pass
x = MyClass()
然后我可以如下设置 x 的属性:
x.myAttr = 1
或 x.__setattr__('myAttr', 1)
但是,如果我听写
d = {}
我无法为其设置属性。例如,如果我这样做
d.__setattr__('myAttr', 1)
我收到错误“'dict' object has no attribute 'myAttr'”如果我尝试会发生同样的事情
d.myAttr = 1
我注意到在 x.myAttr = 1 的情况下实际发生的是
x.__dict__
用新 key 更新,所以一定是那个
d.__setattr__
不起作用,因为 d 没有
d.__dict__
只是因为 d 是一个字典。如果有人能彻底解释这里发生了什么,我将不胜感激。
所有的python对象都有.__dict__
吗?
为什么我尝试调用 d.__setattr__
时会导致错误提示该属性不存在?
是否有我应该了解的内置类型的特定层次结构?一个简单的引用将不胜感激。
python 2.6.4
Windows XP Pro x64 SP2
最佳答案
dict
实例没有 __dict__
属性,因此您不能为其分配属性。大多数 Python 的内置类(用 C 编写并以不同方式定义属性)没有。如果您将 dict
子类化,子类将具有 __dict__
属性,然后您可以将属性添加到子类的实例。
关于__setattr__ 和 self.__dict__ 之间的 Python 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902107/