可能重复:
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是用户定义的吗?
答案 0 :(得分:2)
不同之处在于,默认情况下,用户定义的类的实例具有与其关联的属性字典。您可以使用vars(my_obj)
或my_obj.__dict__
访问此词典。您可以通过定义__slots__
:
class MyClass(object):
__slots__ = []
内置类型也可以提供属性字典,但通常它们不提供。 支持属性的内置类型的示例是函数的类型。