Bob*_*ver 6 python class slots python-3.x
参考手册中明确记录了这一点:
\n\n\n非空 _ slot _ 不适用于从 \xe2\x80\x9cvariable-length\xe2\x80\x9d 内置类型(例如 int、bytes 和 tuple)派生的类。
\n
情况确实如此,写道:
\nclass MyInt(int):\n __slots__ = 'spam',\nRun Code Online (Sandbox Code Playgroud)\n结果是:
\nTypeError: nonempty __slots__ not supported for subtype of 'int'\nRun Code Online (Sandbox Code Playgroud)\n这是为什么呢?为什么空槽可以使用但非空槽禁止使用?
\n__slots__在 object\xe2\x80\x99s 布局中为定义的每个槽以固定偏移量保留空间。(这就是它避免使用 a__dict__来存储它们的方法。)可变长度对象可以在其可变大小数据之前有一个固定长度的前缀,但是当从这样的类型派生时,\xe2\x80\x99s 没有可用的添加槽的固定偏移量。由于 的部分目的__slots__是快速查找,因此教它如何查看可变长度数据的末尾并没有多大意义。 __dict__然而,确实有这样的支持,因此用 .xe2\x80\x99抑制它是有意义的__slots__=()。