为什么自定义类型接受Python中的ad-hoc属性(而内置函数不接受)?

时间:2010-07-30 18:52:05

标签: python attributes datamodel custom-type

我想知道为什么一个人能够为自定义类型的实例创建一个新属性(“new”表示“以前没有在类体中定义”),但是不能为内置类型,如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'

1 个答案:

答案 0 :(得分:6)

某些对象没有__dict__属性(这是一个存储所有自定义“新定义”属性的字典)。您可以使用__slots__变量模拟相同的行为(请参阅python reference)。当您使用__dict__对类进行子类化时,__slots__变量无效。因为你总是为新样式类继承对象,所以对象必须没有__dict__,因为这样就无法使用__slots__。没有__slots__的类占用的内存较少,可能会稍快一些。