10

我想知道为什么能够为自定义类型的实例创建一个新属性(“新”表示“以前未在类主体中定义”),但不能为内置的-在类型上,就像object它本身一样。

代码示例:

>>> class SomeClass(object):
...     pass
... 
>>> sc = SomeClass()
>>> sc.name = "AAA"
>>> sc.name
'AAA'
>>> obj = object()
>>> obj.name = "BBB"
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'object' object has no attribute 'name'
4

1 回答 1

6

有些对象没有 __dict__ 属性(这是一个存储所有自定义“新定义”属性的字典)。您可以使用 __slots__ 变量模拟相同的行为(请参阅python 参考)。当您使用 __dict__ 子类化一个类时,__slots__ 变量不起作用。由于您总是为新样式类子类化对象,因此该对象不能有 __dict__,因为这将导致无法使用 __slots__。没有 __slots__ 的类占用更少的内存并且可能稍微快一些。

于 2010-07-30T19:13:49.360 回答