gpt4 book ai didi

__setattr__ 和 self.__dict__ 之间的 Python 交互

转载 作者:太空狗 更新时间:2023-10-30 00:51:35 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com