[英]Are __dict__ and __weakref__ the default slots at class definition?
[英]Why is __weakref__ removed by default when __slots__ is used?
我认为__slots__
的主要目的是通过允许显式指定属性来节省内存使用,而不是使用允许在实例上进行动态属性赋值的__dict__
。 所以我在某种程度上理解为什么在使用__slots__
时默认删除了__dict__
。 但是为什么同时默认删除__weakref__
?
参考: https : //docs.python.org/3/reference/datamodel.html#slots
我无法读懂思想,但我怀疑理由是这样的:
__slots__
时默认没有禁用__weakref__
,那么提供一种明确保存相关内存的方法还需要另一种特殊的退出机制 鉴于根本不常使用弱引用,默认情况下禁用它可能更简单,可以选择重新加入。
潜水到实现细节,从某种意义上说,未开槽的用户定义的类在基础对象标题之上有正好两个“槽”(一个用于__dict__
,一个用于__weakref__
),所以让__slots__
说“用这个显式列表替换默认值”当__slots__
发挥__weakref__
时,自然地删除__dict__
和__weakref__
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.