无论是手动销毁,还是 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-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有