析构方法
在创建对象时,系统自动调用init()方法,在对象被清理时,系统也会自动调用一个__del__()
方法,这个方法就是类的析构方法。
在介绍析构方法之前,先来了解Python的垃圾回收机制。Python中的垃圾回收主要采用的是引用计数。引用计数是一种内存管理技术,它通过引用计数器记录所有对象的引用数量,当对象的引用计数器数值为0时,就会将该对象视为垃圾进行回收。getrefcount()函数是sys模块中用于统计对象引用数量的函数,其返回结果通常比预期的结果大1,这是因为getrefcount()函数也会统计临时对象的引用。
当一个对象的引用计数器数值为0时,就会调用__del__()
方法,下面通过一个示例进行演示,代码如下:
import sys
class Destruction:
def __init__(self):
print('对象被创建')
def __del__(self):
print('对象被释放')
上述代码定义了包含构造方法和析构方法的Destruction类,其中构造方法在创建Destruction类的对象时打印“对象被创建”,析构方法在销毁Destruction类的对象时打印“对象被释放”。
创建对象destruction,调用getrefcount()函数返回Destruction类的对象的引用计数器的值,示例代码如下:
destruction = Destruction()
print(sys.getrefcount(destruction))
运行程序,结果如下所示:
对象被创建
2
对象被释放
从输出结果中可以看出,对象被创建以后,其引用计数器的值变为2,由于返回引用计数器的值时会增加一个临时引用,因此对象引用计数器的值实际为1。