__setattr__ 和 self.__dict__ 之间的 Python 交互

标签 python

如果我像这样创建一个类实例

class MyClass(object):
    pass
x = MyClass()

然后我可以如下设置 x 的属性:

x.myAttr = 1x.__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/

相关文章:

python - 创建一个图形,其中包含按 gridspec 布局排列的绘图、 slider 和其他小部件

python - Python:数据框到数据库

python、pyenv 和重新编译来处理 64 位问题?

python - python 中的行 n= n 和 int(n) 是什么意思

python - 如何将 [] 与自定义 __builtin__ 列表一起使用?

python - 如何将 sqlamp 模块连接到 Flask-SQLAlchemy session ?

python - 使用(常量)参数保存/加载 Keras 模型

python - 基于关键字搜索使用python从xml文件中提取值

python - 如何在 Python 中以相反的顺序读取 CSV 文件?

python - AWS/EB - 受到内部虚拟连接的影响