我想知道为什么一个人能够为自定义类型的实例创建一个新属性(“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'
答案 0 :(得分:6)
某些对象没有__dict__属性(这是一个存储所有自定义“新定义”属性的字典)。您可以使用__slots__变量模拟相同的行为(请参阅python reference)。当您使用__dict__对类进行子类化时,__slots__变量无效。因为你总是为新样式类继承对象,所以对象必须没有__dict__,因为这样就无法使用__slots__。没有__slots__的类占用的内存较少,可能会稍快一些。