是什么让用户定义的对象不在Python中抛出AttributeError?

时间:2012-06-06 11:35:37

标签: python oop

  

可能重复:
  Why can't I directly add attributes to any python object?
  Why can't you add attributes to object in 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是用户定义的吗?

1 个答案:

答案 0 :(得分:2)

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

来阻止创建属性字典
class MyClass(object):
    __slots__ = []

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