首页 > 解决方案 > 为什么不调用 __del__ 方法?

问题描述

object.__del__(self)文档中的内容:

当实例即将被销毁时调用

del文档中的内容:

删除名称会从本地或全局命名空间中删除该名称的绑定,具体取决于该名称是否出现在同一代码块中的全局语句中

我还在这里阅读了许多关于 SO 的相关问题。我知道如果有多个变量指向同一个对象,那么当然删除一个名称不会触发对象__del__方法(因为仍然有一个变量引用该对象)。

所以我尝试了一些实验来检查我是否正确理解了所有内容。假设我有这个课程:

class A:
    def __del__(self):
        print('Object finalizer')

现在,这就是我所做的:

>>> a1 = A()
>>> del a1
Object finalizer

到目前为止,一切都按预期工作:只有一个对该对象的引用,所以一旦我删除该引用,该对象也会被删除。然后,我尝试使用两个名称引用同一个对象:

>>> a1 = A()
>>> a2 = a1

检查这两个变量是否实际上引用了同一个对象:

>>> a1
<__main__.A object at 0x7fef201f4fd0>
>>> a2
<__main__.A object at 0x7fef201f4fd0>

但是,如果我现在尝试删除所有引用,事情不会按预期进行:

>>> del a1
>>> del a2
>>>

我期待__del__在声明之后调用该方法del a2。为什么会这样?我错过了什么?

标签: pythonpython-3.x

解决方案


推荐阅读