【发布时间】:2015-02-03 14:10:06
【问题描述】:
乍一看,Python 的 __del__ 特殊方法似乎提供了与 C++ 中的析构函数大致相同的优点。但是根据 Python 文档 (https://docs.python.org/3.4/reference/datamodel.html),无法保证您的对象的 __del__ 方法会被调用!
不能保证在解释器退出时为仍然存在的对象调用
__del__() 方法。
也就是说,方法是没用的!不是吗?一个可能会或可能不会被调用的钩子函数真的没有多大用处,所以__del__ 没有提供任何关于 RAII 的信息。如果我有一些必要的清理工作,我不需要它在某些时间运行,哦,当 GC 感觉真的如此时,我需要它运行 可靠、确定性和100% 的时间。
我知道 Python 提供了上下文管理器,这对于该任务更有用,但为什么要保留 __del__ 呢?有什么意义?
【问题讨论】:
-
我真的不明白你到底在问什么。你的问题是“
__del__基本上没用吗?”? (我相信这是您的问题)在这种情况下,我相信您会通过删除所有对 C++ 或 RAII 的引用来澄清这个问题,这些引用完全不相关。如果您的问题是“如何在 Python 中实现 RAII?我可以为此使用__del__吗?”那么您可能需要更改问题中的很多内容。 -
@Bakuriu 问题的关键是,'__del__' 到底有什么意义?有人可以为该方法命名一个实际的用例吗?