2024-09-26 18:20:15 发布
网友
本手册中明确记录了:
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',
结果:
为什么会这样?为什么可以使用空槽而非空槽?在
__slots__为每个定义的槽在对象布局中以固定偏移量保留空间。(这就是避免在其中存储__dict__)可变长度对象可以在其可变大小的数据之前有一个固定长度的前缀,但是当从这种类型派生时,没有可用的固定偏移量来添加插槽。由于__slots__的部分目的是快速查找,所以教它如何查找可变长度数据的末尾没有多大意义。__dict__,但是,确实有这样的支持,所以用__slots__=()来抑制它是有意义的。在
__slots__
__dict__
__slots__=()
__slots__
为每个定义的槽在对象布局中以固定偏移量保留空间。(这就是避免在其中存储__dict__
)可变长度对象可以在其可变大小的数据之前有一个固定长度的前缀,但是当从这种类型派生时,没有可用的固定偏移量来添加插槽。由于__slots__
的部分目的是快速查找,所以教它如何查找可变长度数据的末尾没有多大意义。__dict__
,但是,确实有这样的支持,所以用__slots__=()
来抑制它是有意义的。在相关问题 更多 >
编程相关推荐