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
相关产品推荐
相关产品推荐

