5

可能重复:
为什么我不能直接向任何 python 对象添加属性?
为什么不能在 python 中为对象添加属性?

以下代码不会抛出 AttributeError

class MyClass():
    def __init__(self):
        self.a = 'A'
        self.b = 'B'
my_obj = MyClass()
my_obj.c = 'C'

这与

>>> {}.a = 'A'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'a'

有什么不同?它是关于 dict 是一个内置类而 MyClass 是用户定义的吗?

4

1 回答 1

2

不同之处在于用户定义类的实例默认具有与其关联的属性字典。vars(my_obj)您可以使用或访问此词典my_obj.__dict__。您可以通过定义来防止创建属性字典__slots__

class MyClass(object):
    __slots__ = []

内置类型也可以提供属性字典,但通常不提供。支持属性的内置类型的一个示例是函数的类型。

于 2012-06-06T11:51:49.727 回答