>>> a = object()
>>> a.x = 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'x'
>>> b = lambda:0
>>> b.x = 5
>>> b.x
5
为什么object
类的实例没有__dict__
,导致它在语义上不可变?选择这种设计的原因是什么?
具体来说,为什么:
所述在C中定义的类型实例没有__dict__属性 默认值。
答案 0 :(得分:7)
Python 2 is not very helpful的文档解释了为什么您无法为object()
分配属性,但Python 3 provides a bit more information的文档:
返回一个新的无特征对象。 object是所有类的基础。它具有所有Python类实例共有的方法。此函数不接受任何参数。
注意:对象没有
__dict__
,,因此您无法将任意属性分配给对象类的实例。
因此,您无法向object()
添加任意属性的原因似乎是因为object()
个实例没有__dict__
属性的实现,而不是因为{ {1}}实例是不可变的:
object()
另一个有趣的事情,但可能与手头的讨论无关,是虽然对象的实例可能没有>>> hasattr(object(), '__dict__')
False
>>>
实现,但__dict__
类本身作用:
object
至于为什么部分问题,我找不到>>> hasattr(object, '__dict__')
True
没有object()
的原因的确切原因。可能是因为 - 正如@tdelany在评论中已经提到的那样 - 一个实现细节。如果你真的想要一个明确的答案,你应该ask Guido himself。