gpt4 book ai didi

python - `weakref` 回调可以替换 `__del__` 吗?

转载 作者:IT老高 更新时间:2023-10-28 21:14:12 25 4
gpt4 key购买 nike

是否有任何障碍阻止weakref从做 __del__ 所做的所有事情,但有更强的保证(例如,finalize 保证调用将在解释器退出之前进行,并且调用的顺序是明确定义的等)?

似乎在遥远的过去it was thought weakref 最终会导致从语言中删除 __del__

是什么阻止了这种情况的发生?

好像有few use cases for __del__ ,并且我所知道的所有这些似乎至少与 weakref 回调或 weakref.finalize 一样好(通常更好)。

更新:

PEP 442显着改善了 __del__ 的行为,以及 @gz 和 @user2357112 提到的对 weakref 的担忧,我想知道该语言是否普遍朝着制作 __del__ 的方向发展 更可靠,或倾向于使用 weakref 而不是 __del__,或两者兼而有之。

最佳答案

__del__ 仍然存在是有某种务实的原因。几个重要的 weakref 改进,包括 finalize,是 new in Python 3.4 .因此,用更好的弱引用替换 __del__ 错过了使用 py3k 进行语言破坏性更改的窗口。

我认为大多数用途可以被基本的weakref功能所取代,但我对Richard Oudkerk 在issue 15528 中的观察感到震惊。 finalize 提出和实现的地方:

[Weakref callbacks] are low level, and working out how to use them correctly requires a bit of head scratching. One must find somewhere to store the weakref till after the referent is dead, and without accidentally keeping the referent alive. Then one must ensure that the callback frees the weakref (without leaving any remnant ref-cycles).

When it is an option, using a __del__ method is far less hassle.

无论如何,在考虑 Python 4 时,也许应该再次提出这个问题? ;)

关于python - `weakref` 回调可以替换 `__del__` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43758886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com