Python 中的析构函数

2025年3月17日 | 阅读 3 分钟

用户调用析构函数来销毁对象。在 Python 中,开发者可能不像在 C++ 语言中那样需要析构函数。这是因为 Python 有一个垃圾回收器,它的功能是自动处理内存管理。

在本文中,我们将讨论 Python 中的析构函数如何工作以及用户何时可以使用它们。

__del__() 函数在 Python 中用作析构函数。当对象的引用全部被删除,并且它被垃圾回收时,用户可以调用 __del__() 函数。

语法

用户还应该注意,当对象超出引用范围或代码结束时,对对象的引用也会被删除。

在以下示例中,我们将使用 __del__() 函数和 del 关键字来删除对象的所有引用,以便析构函数自动调用。

例如

输出

The class called Animals is CREATED.
The destructor is called for deleting the Animals.

解释 -

在上面的代码中,析构函数在对象引用被删除后或在程序结束运行后被调用。这意味着对象的引用计数变为零,而不是在对象超出作用域时。我们将通过下一个示例来解释这一点。

我们还可以注意到,析构函数是在程序结束运行后调用的。

示例

输出

we are calling the Create_object() function now
we are creating the object
The class called Animals is CREATED.
we are ending the function here
The Program is ending here
The destructor is called for deleting the Animals.

现在,在下一个示例中,我们将看到当调用 function() 时,它将创建类 Zebra 的实例,该实例会将自身传递给类 Lion,然后类 Lion 将设置对类 Zebra 的引用,这将导致循环引用。

示例

输出

Zebra is dead

通常,Python 的垃圾回收器会用于检测这类循环引用,并会移除引用。但是,在上面的示例中,自定义析构函数用于将该项标记为不可回收。

简单来说,这意味着垃圾回收器不知道对象应该以何种顺序销毁,所以它会保留它们。因此,如果用户的实例涉及这种循环引用,它们将在应用程序运行期间一直存储在内存中。

结论

在本文中,我们解释了 Python 中析构函数的功能以及用户如何使用它们来删除其引用已从内存中移除的对象。