__del__退出行为

发布于 2021-01-29 14:10:05

我有一些test.py文件:

class A:
    def __init__(self):
        print("A init")

    def __del__(self):
        print("A del")

a = A()

当我运行10次(python3 test.py)时,它总是产生下一个输出:

A init
A del

但是,如果我sys.exit在脚本末尾添加调用:

import sys

class A:
    def __init__(self):
        print("A init")

    def __del__(self):
        print("A del")

a = A()

sys.exit(-1)

在10个案例中有5个(随机)

A init

在后半部分情况下:

A init
A del

我在Windows 7 x64上使用Python3.4.3 [MSC v.1600
32位]。那么为什么__del__方法不是每次都调用?我是否需要使用其他退出方法来传递脚本的返回代码,并确保所有析构函数都已执行?还有一个相关的问题:是否可以在从OS接收SIGTERM或SIGKILL时执行析构函数?

关注者
0
被浏览
175
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    文档中

    不能保证__del__()在解释器退出时为仍然存在的对象调用方法。

    如果要确保a.__del__调用了该方法,则必须显式删除该实例:

    a = A()
    del a   # Assuming this is the final reference to the object
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看