Python如何确保在模块死亡之前调用对象的__del __()方法?

Python如何确保在模块死亡之前调用对象的__del __()方法?,第1张

Python如何确保在模块死亡之前调用对象的__del __()方法?

正如我们之前告诉您的那样,

__del__
当解释器退出时,您确实不应依赖于被调用。有两种方法可以正确执行此 *** 作:

首先是

atexit

import osimport atexitclass Logger(object):       def on_exit(self):        print "os: %s." % oslogger = Logger()atexit.register(logger.on_exit)

这样可以确保记录器在退出时完成。


*多读一些问题,因为您打算将单个实例绑定到定义实例类的模块,所以下面的上下文管理器解决方案对此不起作用,因为无法将整个实例留在上下文中执行程序。您需要使用

atexit.register
。但是,从程序设计的角度来看,与
atexit.register
重组代码允许的情况相比,我更希望使用上下文管理器来管理我的资源。

第二种 (更好的*)
方法是使您的类成为上下文管理器,该管理器在退出上下文时执行清除代码。然后您的代码将如下所示:

import osclass Logger(object):    def __enter__(self):        return self    def __exit__(self, exc_type, exc_value, traceback):        print "os:",str(os)with Logger() as logger:    #do something ...


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5661842.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存