对象.__ del __(self)是最适合刷新日志类的地方吗?

时间:2011-10-04 17:46:49

标签: python-3.x destructor flush

我的Python脚本有一个自定义日志记录类,其flush()方法print()是列表的内容。

我希望在特殊flush()方法中包含__del__(),以防程序结束而不刷新日志。但是,the documentation中的说明指出:

  

[...]当 del ()被调用以响应被删除的模块时(例如,当完成程序的执行时), del <引用的其他全局变量/ strong>()方法可能已被删除或正在拆除(例如导入机器关闭)。

有人会推荐一种不同的方法,如果是这样,为什么?

1 个答案:

答案 0 :(得分:1)

您可能希望将此记录器设为context manager。在异常终止的情况下,仍然不会刷新,但很少有事情会发生。但即使在正常终止时,也可能不会在对象上调用__del__

使用with语句时,记录器可能是不合适的事情之一,因为它们非常全局,因此不确定上下文管理器是否合适。