Python-什么是__del__方法,如何调用?
我正在阅读代码。有一个__del__
定义方法的类。我发现此方法用于销毁该类的实例。但是,我找不到使用此方法的地方。这样做的主要原因是我不知道如何使用此方法,可能不是这样的:obj1.del()
。那么,我的问题是如何调用该__del__
方法?
回答:
__del__
是终结器。当对象被垃圾回收时调用该方法,该操作在删除该对象的所有引用之后的某个时间发生。
在一个简单的情况下,这可能是在你说完之后,del x
或者如果x是局部变量,则在函数结束之后。特别是,除非有循环引用,否则CPython
(标准Python实现)将立即进行垃圾回收。
但是,这是CPython
的实现细节。Python
垃圾回收的唯一必需属性是,它在所有引用都被删除之后发生,因此这可能在此之后没有必要发生,也可能根本没有发生。
此外,由于多种原因,变量可以生存很长时间,例如,传播异常或模块自省可以使变量引用计数保持大于0。此外,变量可以是引用循环的一部分-启用垃圾回收的CPython
多数会中断,但不是全部,这样的周期,甚至只是周期性的。
由于你不能保证它会被执行,因此永远不要将你需要运行的代码放入其中 __del__()
-而是,该代码属于块的finally
子句try或with
语句中的上下文管理器。不过,也有有效的使用情况为__del__:例如,如果一个对象X
的引用Y
,也保留副本Y参考在全球cache(cache['X -> Y'] = Y)
,那么这将是对礼貌X.__del__
也删除缓存条目。
如果你知道析构函数提供了必要的清除操作(违反了上述准则),则你可能希望直接调用它,因为该方法没有什么特别之处:x.__del__()
。显然,只有在知道不介意被两次调用的情况下,才应该这样做。或者,作为最后的选择,你可以使用重新定义此方法
type(x).__del__ = my_safe_cleanup_method
以上是 Python-什么是__del__方法,如何调用? 的全部内容, 来源链接: utcz.com/qa/427598.html