【问题标题】:Destructor in PythonPython 中的析构函数
【发布时间】:2021-11-04 21:22:24
【问题描述】:

下面是代码。我没有手动 del 对象引用,但在 VScode 中 __del__ 也被调用。但是同一段代码正在 Jupyter Notebook 中运行。这意味着,__del__ 不会自动调用。代码有问题吗?使困惑。 VScode 是否(自动)处理垃圾收集器?谷歌了很多,但没有得到合适的答案。

class Student:
    # constructor
    def __init__(self, name):
        print('Inside Constructor')
        self.name = name
        print('Object initialized')

    def show(self):
        print('Hello, my name is', self.name)

    # destructor
    def __del__(self):
        print('Inside destructor')
        print('Object destroyed')

# create object
s1 = Student('Emma')
s2 = s1;
s3 = s1;
print("Id of S1: " , id(s1));

【问题讨论】:

    标签: python python-3.x destructor


    【解决方案1】:

    最好调用__del__ 一个终结器方法,因为这个方法在对象即将被垃圾回收时被调用。 (就像所有对该对象的引用都消失了一样。)

    在 VSCode 中,甚至当您在终端中运行脚本时,当解释器到达文件末尾时,它将终止执行和进程,因此任何对象都将被销毁。所以你可以看到这个方法被调用了。因此,即使您没有明确地del 对对象的引用,所有引用最终都会消失。

    另一方面,Jupyter 笔记本仍在运行,而且它可能会保留对您的对象的引用以供内部工作...

    在代码的最后一行输入一个简单的input(),您可以看到__del__ 也不会在VScode 或终端中被调用。

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      相关资源
      最近更新 更多