参考手册中明确记录了这一点:
非空_slots_ 不适用于从“可变长度”内置类型(例如 int、bytes 和 tuple)派生的类。
情况确实如此,写道:
class MyInt(int):
__slots__ = 'spam',
结果是:
TypeError: nonempty __slots__ not supported for subtype of 'int'
这是为什么呢?为什么空槽可以使用但非空槽禁止?
__slots__
在对象布局中为每个定义的槽以固定偏移量保留空间。 (这就是如何避免__dict__
)可变长度对象可以在其可变大小数据之前有一个固定长度前缀,但是当从这样的类型派生时,没有可用的固定偏移量来添加槽。由于部分目的__slots__
是快速查找,教它如何越过变长数据的末尾查找没有多大意义。__dict__
不过,确实有这样的支持,所以很有意义suppress它与__slots__=()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)