You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中__del__方法自动调用问题:未用del却触发该方法

Python中__del__方法自动触发的问题

我正在学习Python类与对象相关知识,之前了解到__del__(self)方法应该仅在使用del关键字+变量时才会被调用,但实际运行代码时该方法却自动触发了。

测试代码

class person:
    def __init__(self, name, subclass, gender):
        self.name = name
        self.subclass = subclass
        self.gender = gender

    def __del__(self):
        print(f"{self.name} deleted.")

xardas = person("Xardas", "Necromancer", "male")
print(xardas.name)
print(xardas.subclass)
print(xardas.gender)

运行输出

Xardas
Necromancer
male
Xardas deleted.

我并未预期最后一行输出。在代码末尾添加del xardas后无明显变化;添加xardas.__del__()后输出如下:

Xardas
Necromancer
male
Xardas deleted.
Xardas deleted.

原因解释

Python的垃圾回收机制会在对象的引用计数归0时自动调用__del__方法。当整个脚本执行完毕时,程序会销毁所有在本次运行中创建的对象,因此xardas这个实例的__del__方法会被自动触发,这和你是否手动调用del无关。

  • 手动添加del xardas时,只是提前让该对象的引用计数归0并触发__del__,但脚本结束时该对象已经被销毁,所以不会重复触发,看起来和原输出无差异。
  • 直接调用xardas.__del__()是手动执行这个方法,这不属于垃圾回收的自动触发流程,因此会额外多一次输出。注意:__del__方法不建议手动调用,它的设计初衷是由Python垃圾回收机制自动调用。

内容的提问来源于stack exchange,提问作者RasCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:39:52