Python 中的析构函数

丹麦语Ansari09

下面是代码。我没有手动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));
SorousH Bakhtiary

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

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

另一方面,Jupyter Notebook 仍在运行,并且可能还会保留对您的对象的引用以用于内部工作...

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章