繁体   English   中英

为什么在使用__slots__时默认删除__weakref__?

[英]Why is __weakref__ removed by default when __slots__ is used?

我认为__slots__的主要目的是通过允许显式指定属性来节省内存使用,而不是使用允许在实例上进行动态属性赋值的__dict__ 所以我在某种程度上理解为什么在使用__slots__时默认删除了__dict__ 但是为什么同时默认删除__weakref__

参考: https//docs.python.org/3/reference/datamodel.html#slots

我无法读懂思想,但我怀疑理由是这样的:

  1. 如果在使用__slots__时默认没有禁用__weakref__ ,那么提供一种明确保存相关内存的方法还需要另一种特殊的退出机制
  2. 更多特殊情况增加了语言的复杂性,而这种情况并没有带来真正的好处

鉴于根本不常使用弱引用,默认情况下禁用它可能更简单,可以选择重新加入。

潜水到实现细节,从某种意义上说,未开槽的用户定义的类在基础对象标题之上有正好两个“槽”(一个用于__dict__ ,一个用于__weakref__ ),所以让__slots__说“用这个显式列表替换默认值”当__slots__发挥__weakref__时,自然地删除__dict____weakref__

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM