您的位置:

Python 中的析构器

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

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

del() 函数在 Python 中用作析构器。当对象的所有引用都被删除,变成垃圾收集时,用户可以调用 del() 函数。

语法:


def __del__(self):
    # the body of destructor will be written here. 

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

在下面的例子中,我们将使用 del()函数和 del 关键字删除对象的所有引用,这样析构器将自动涉及。

例如:


# we will illustrate destructor function in Python program
# we will create Class named Animals
class Animals:

    #  we will initialize the class
    def __init__(self):
        print('The class called Animals is CREATED.')

    # now, we will Call the destructor
    def __del__(self):
        print('The destructor is called for deleting the Animals.')

object = Animals()
del object 

输出:

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

解释-

在上面的代码中,当对象的引用被删除或者程序结束后,析构器已经被调用。这意味着对象的引用计数变为零,而不是当对象超出范围时。我们将通过展示下一个例子来解释这一点。

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

示例:


# We will create Class named Animals
class Animals:

    #  Initialize the class
    def __init__(self):
        print('The class called Animals is CREATED.')

    # now, we will Call the destructor
    def __del__(self):
        print('The destructor is called for deleting the Animals.')

def Create_object():
    print('we are creating the object')
    object = Animals()
    print('we are ending the function here')
    return object

print('we are calling the Create_object() function now')
object = Create_object()
print('The Program is ending here')

输出:

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.

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

示例:


class Animals:

    #  we will initialize the class
    def __init__(self):
        print(' The class called Animals is CREATED.')
class Lion:
    def __init__(self, zebraa):
        self.zebra = zebraa
class Zebra:
    def __init__(self):
        self.lion = Lion(self)
    def __del__(self):
        print("Zebra is dead")
def function():
    zebra = Zebra()

function()

输出:

Zebra is dead

一般来说,Python 的垃圾收集器(用于检测这些类型的循环引用)也会移除引用。但是,在上面的例子中,自定义析构器被用来将这个项目标记为无法收集。

用简单的语言来说,它意味着垃圾收集器不知道对象应该被销毁的顺序,所以它离开了它们。因此,如果用户的实例包含在这个循环引用中,只要应用运行,它们就会一直存储在内存中。

结论

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