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

我想知道为什么一个人能够创建一个新的属性(“新”表示“以前没有在类体中定义”)一个自定义类型的实例,但是不能做一个内置的属性,类型,像对象本身.

代码示例:

>>> 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'
最佳答案
某些对象没有__dict__属性(这是一个存储所有自定义“新定义”属性)的字典.您可以使用__slots__变量来模拟相同的行为(参见python reference).当您使用__dict__子类化类时,__slots__变量无效.而且,当您总是对新的样式类进行子类化时,对象不能有__dict__,因为这样就不可能使用__slots__.没有__slots__的类占用较少的内存,可能稍快一些.

转载注明原文:为什么自定义类型接受Python中的ad-hoc属性(并且内置的不是)? - 代码日志