-#### 1、基本概念(构造函数与析构函数)
特殊函数:由系统自动执行,在程序中不可显式地调用他们
构造函数: 建立对象时对对象的数据成员进行初始化(对象初始化)
析构函数: 对象生命期结束时回收的对象(回收/撤销对象)
2、__del__析构方法的作用
**使用场景:**一般定义在类内,被称为析构方法
作用: 销毁类的实例的时候调用,以释放占用的资源,其中可以放一些清理资源的代码,又如释放连接等
举例:
import time
class Person:
def __init__(self,name,age=18):
self.name = name
self._age = age
def __del__(self):
print('del析构方法进行对象销毁的清理工作')
def atest():
tom = Person('tom')
atest()
运行结果:
以上结果可以看出,在类调用结束后,进行销毁时会自动调用__del__
2、与del方法的区别
我们先看个例子:
class Person:
def __init__(self,name,age=18):
self.name = name
self._age = age
def pa_a(self):
print(f"姓名:{self.name}")
# def __del__(self):
# print('del析构方法进行对象销毁的清理工作')
def atest():
tom = Person('tom')
del tom
tom2 = tom
print(tom2.pa_a())
atest()
运行结果:
从以上运行结果可以看出,del tom执行后,相当于tom在内存中的引用被删除了,再将tom2指向tom的内存地址,是无法找到引用的,也就会报错。可以看出del是会删除引用计数的
再让我们来看看__del__:
import time
class Person:
def __init__(self,name,age=18):
self.name = name
self._age = age
def __del__(self):
print('del析构方法进行对象销毁的清理工作')
def atest():
tom = Person('tom')
tom.__del__()
tom.__del__()
tom.__del__()
tom.__del__()
print('==========start========')
tom2 = tom
tom3 = tom2
print('=======del1')
del tom
time.sleep(3)
print('======del2')
del tom2
print('==========del3')
del tom3
time.sleep(3)
print('========end')
atest()
运行结果:
结论:
del: 会删除内存中的引用计数
_del_不会删除引用计数,只是在对象销毁的时候自动调用