在python中完成进程时,有什么方法不调用类的析构函数吗?

时间:2019-11-07 14:36:48

标签: python python-3.x destructor

我想知道程序完成时未调用destrucor(__del__)。

如何调整__del__

例如

class destruct:
    def __init__(self, name):
        self.name = name
        print(f"(initializing {self.name}...)")

    def __del__(self):
        print(f"(Destroying {self.name} ...)")


test1 = destruct('a')
test2 = destruct('b')

该代码的结果:

(initializing a...)
(initializing b...)
(Destroying a ...)  <- I don't want to printing this message
(Destroying b ...)  <- I don't want to printing this message

2 个答案:

答案 0 :(得分:3)

无论何时删除对象,都将调用__del__的全部要点。

对于C-Python对象,如果其引用计数器为0,则该对象通常在函数作用域的末尾或程序完成时删除。

如果您不希望出现这种情况,则不要使用__del__,而要实现其他一些显式机制。

我们可能会建议您提供有关您的确切背景的更多详细信息。

答案 1 :(得分:0)

这样的

方法应始终由Python运行时在适当的时间调用。有几次,如果/何时不会发生这种情况:

  • 机器已关闭!如果您要编写涉及磁盘或网络等资源的代码,请务必牢记这一点
  • 该过程突然终止。例如Unix中的round_date(date_time, unit = "30 minutes") ,或Windows中的“强制退出”
  • 调试器或其他本机代码介入
  • 其他一些代码“猴子修补”您的类/对象以执行其他操作

可能还有其他方式