为什么在Python中自定义类型可以接受临时属性而内置类型不行?

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'
1个回答

6

有些对象没有__dict__属性(它是一个存储所有自定义“新定义”属性的字典)。您可以使用__slots__变量来模拟相同的行为(请参见Python参考文档)。当您正在对具有__dict__的类进行子类化时,__slots__变量不起作用。由于您始终会为新样式类子类化,因此不能具有__dict__,否则将无法使用__slots__。没有__slots__的类占用更少的内存,可能稍微快一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接