为什么非空槽不能与int、tuple、bytes子类一起使用?

2024-06-16 10:50:59 发布

您现在位置:Python中文网/ 问答频道 /正文

本手册中明确记录了:

Nonempty __slots__ does not work for classes derived from “variable-length” built-in types such as int, bytes and tuple.

事实是这样,他写道:

class MyInt(int):
    __slots__ = 'spam',

结果:

^{pr2}$

为什么会这样?为什么可以使用空槽而非空槽?在


Tags: fromfor记录notvariablelengthclassesint
1条回答
网友
1楼 · 发布于 2024-06-16 10:50:59

__slots__为每个定义的槽在对象布局中以固定偏移量保留空间。(这就是避免在其中存储__dict__)可变长度对象可以在其可变大小的数据之前有一个固定长度的前缀,但是当从这种类型派生时,没有可用的固定偏移量来添加插槽。由于__slots__的部分目的是快速查找,所以教它如何查找可变长度数据的末尾没有多大意义。__dict__,但是,确实有这样的支持,所以用__slots__=()来抑制它是有意义的。在

相关问题 更多 >