无论是手动销毁,还是 Python 自动帮我们销毁,都会调用 __del__() 方法。举个例子:大多数情况下,Python 开发者不需要手动进行垃圾回收,因为 Python 有自动的垃圾回收机制(下面会讲),能自动将不需要使用的实例对象进行销毁。
class CLanguage: def __init__(self): print("调用 __init__() 方法构造对象") def __del__(self): print("调用__del__() 销毁对象,释放其空间") clangs = CLanguage() del clangs程序运行结果为:
调用 __init__() 方法构造对象
调用__del__() 销毁对象,释放其空间
class CLanguage: def __init__(self): print("调用 __init__() 方法构造对象") def __del__(self): print("调用__del__() 销毁对象,释放其空间") clangs = CLanguage() #添加一个引用clangs对象的实例对象 cl = clangs del clangs print("***********")程序运行结果为:
调用 __init__() 方法构造对象
***********
调用__del__() 销毁对象,释放其空间
可以看到,当程序中有其它变量(比如这里的 cl)引用该实例对象时,即便手动调用 __del__() 方法,该方法也不会立即执行。这和 Python 的垃圾回收机制的实现有关。注意,最后一行输出信息,是程序执行即将结束时调用 __del__() 方法输出的。
del clangs
语句,只会导致 C 的计数器减 1(值变为 1),因为 C 的计数器值不为 0,因此 C 不会被销毁(不会执行 __del__() 方法)。del cl print("-----------")则程序的执行结果为:
调用 __init__() 方法构造对象
***********
调用__del__() 销毁对象,释放其空间
-----------
class CLanguage: def __del__(self): print("调用父类 __del__() 方法") class cl(CLanguage): def __del__(self): print("调用子类 __del__() 方法") c = cl() del c程序运行结果为:
调用子类 __del__() 方法
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有