我有一些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时执行析构函数?
从文档中:
不能保证
__del__()
在解释器退出时为仍然存在的对象调用方法。
如果要确保a.__del__
调用了该方法,则必须显式删除该实例:
a = A()
del a # Assuming this is the final reference to the object
我们知道, Python 通过调用 __init__() 方法构造当前类的实例化对象,而本节要学的 __del__() 方法,功能正好和 __init__() 相反,其用来销毁实例化对象。 事实上在编写程序时,如果之前创建的类实例化对象后续不再使用,最好在适当位置手动将其销毁,释放其占用的内存空间(整个过程称为 垃圾回收(简称GC) )。 大多数情况下,Python 开发者不需要手动进行垃圾回收,
问题内容: 有人可以解释为什么以下代码会如此行为: 输出(请注意,永远不会调用d2的析构函数)是(python 2.7) 有没有一种方法可以“修复”代码,以便在不删除添加的方法的情况下调用析构函数?我的意思是,放置d2.func = None的最佳位置将在析构函数中! 谢谢 [edit]基于前几个答案,我想澄清一下,我并不是在问using的优点(或不足之处)。我试图创建最短的函数来证明我认为是非直
问题内容: 我有一个python类对象,我想分配一个类变量的值 该执行结果是正确的,但是有一条错误消息指出: 有人可以告诉我我做错了什么吗? 问题答案: 您的方法假定该类在被调用时仍然存在。 这个假设是不正确的。当您的Python程序退出时,已被清除,现在设置为。 测试是否仍然首先存在对该类的全局引用: 或用于获取本地参考: 但是请注意,这意味着更改的语义是子类的(每个子类都有一个属性,而不是只有
在某些项目上运行< code>flutter run时,我收到了以下错误,但是在其他项目上运行正常: 这只是颤振演示项目,我没有做任何更改。