退出行为

时间:2016-01-25 00:00:09

标签: python destructor exit

我有一些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时执行析构函数?

1 个答案:

答案 0 :(得分:2)

来自documentation

  

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

如果您想确保调用a.__del__,则必须明确删除该实例:

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