您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

正如我们之前告诉您的那样,__del__当解释器退出时,您确实不应依赖于被调用。有两种方法可以正确执行此操作:

首先是 atexit

import os
import atexit

class Logger(object):   
    def on_exit(self):
        print "os: %s." % os

logger = Logger()
atexit.register(logger.on_exit)

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

*多读一些问题,因为您打算将单个实例绑定到定义实例类的模块,所以下面的上下文管理器解决方案对此不起作用,因为无法将整个实例留在上下文中执行程序。您需要使用atexit.register。但是,从程序设计的角度来看,与atexit.register重组代码允许的情况相比,我更希望使用上下文管理器来管理我的资源。

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

import os
class 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 ...
python 2022/1/1 18:38:29 有418人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶