Python析构函数__del__的调用机制与子类继承注意事项

山间有风
山间有风
发布时间:2026-10-14| 3人浏览过
原创

本文详解Python中析构函数__del__的调用时机与注意事项。析构函数仅在对象引用计数归零且被垃圾回收器销毁时触发,而非执行del语句时立即调用。在子类重写__del__时,必须显式调用父类的__del__方法,以确保继承资源的正确释放。文章通过代码实例展示了主动删除、自动回收及继承场景下的行为差异。

析构函数的调用时机与主动删除

在Python中,可以通过显式执行del语句来主动删除对象引用,例如执行del 对象名。然而,这并不一定立即触发析构函数。当程序运行结束或对象不再被任何变量引用时,Python解释器会自动进行垃圾回收,此时才会调用析构函数释放资源。

基础析构函数示例


class Animal:
    def __del__(self):
        print("销毁对象{0}".format(self))
cat = Animal()
cat2 = Animal()
del cat2
print("程序结束")

子类继承中的__del__处理规范

如果在子类中重写了__del__方法,必须确保显式调用父类的__del__方法。这是为了保证在回收子类对象时,其占用的所有资源(包括从父类继承的部分)能够被彻底释放。若忽略此步骤,可能导致父类资源泄漏。

子类显式调用父类析构的方法


class Animal:
    def __del__(self):
        print("调用父类 __del__() 方法")
        
class Bird(Animal):
    def __del__(self):
       # super(Bird,self).__del__()  #方法1:显示调用父类的del方法
        print("调用子类 __del__() 方法")
 
cat = Bird()
#del cat   #只能调用子类里面的__del__
#super(Bird,cat).__del__() #方法2:显示调用父类的__del__

析构函数行为实例分析

以下代码示例展示了析构函数的具体行为与扩展用法,包括构造与析构的对应关系,以及引用计数对析构函数调用的影响。

引用计数与垃圾回收机制演示


#coding=utf-8
'''
魔法方法,被__双下划线所包围
在适当的时候自动被调用
'''
#构造init、析构del
class Rectangle:
  def __init__(self,x,y):
    self.x = x
    self.y = y
    print('构造')
  '''
  del析构函数,并不是在del a对象的时候就会调用该析构函数
  只有当该对象的引用计数为0时才会调用析构函数,回收资源
  析构函数被python的垃圾回收器销毁的时候调用。当某一个对象没有被引用时,垃圾回收器自动回收资源,调用析构函数
  '''
  def __del__(self):
    print('析构')
  def getPeri(self):
    return (self.x + self.y)*2
  def getArea(self):
    return self.x * self.y
if __name__ == '__main__':
  rect = Rectangle(3,4)
  # a = rect.getArea()
  # b = rect.getPeri()
  # print(a,b)
  rect1 = rect
  del rect1
  # del rect
  while 1:
    pass

本文介绍了Python析构函数的核心用法与关键注意事项,帮助开发者更好地管理对象生命周期。如需了解更多Python相关技术细节,建议查阅本站过往文章或关注后续更新,感谢支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。