我有一些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 :(得分:2)
无法保证在解释器退出时仍然存在的对象调用
__del__()
方法。
如果您想确保调用a.__del__
,则必须明确删除该实例:
a = A()
del a # Assuming this is the final reference to the object