我想知道为什么能够为自定义类型的实例创建新属性("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'
最佳答案
有些对象没有 __dict__ 属性(这是一个存储所有自定义“新定义”属性的字典)。您可以使用 __slots__ 变量模拟相同的行为(参见 python reference )。当您使用 __dict__ 对类进行子类化时, __slots__ 变量无效。由于您总是将 object 子类化为新样式类,因此 object 不能有 __dict__,因为那样就无法使用 __slots__。没有 __slots__ 的类占用更少的内存并且可能稍微快一些。
关于python - 为什么自定义类型接受 Python 中的临时属性(而内置函数不接受)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3374502/