__del__也称之为析构方法
__del__会在对象被删除以前自动触发
执行时机: 手动删除对象时立马执行,或是程序运行结束时也会自动执行
上例子
列子一python
class People: def __init__(self, name, age): self.name = name self.age = age self.f = open(da, 'w', encoding='utf-8') def __del__(self): print('run======>') # 作回收系统资源相关的事情 self.f.close() obj = People('egon', 18) del obj # del obj会间接删除f的内存占用,可是还须要自定制__del__删除文件的系统占用 print('apan')
run=-====>
apan
列子二数据库
class FileTool: """该类用于简化文件的读写操做 """ def __init__(self,path): self.file = open(path,"rt",encoding="utf-8") self.a = 100 def read(self): return self.file.read() # 在这里能够肯定一个事,这个对象确定不使用了 因此能够放心的关闭问文件了 def __del__(self): self.file.close() tool = FileTool("a.txt") print(tool.read())
典型的应用场景:操作系统
建立数据库类,用该类实例化出数据库连接对象,对象自己是存放于用户空间内存中,而连接则是由操做系统管理的,存放于内核空间内存中code
当程序结束时,python只会回收本身的内存空间,即用户态内存,而操做系统的资源则没有被回收,这就须要咱们定制__del__,在对象被删除前向操做系统发起关闭数据库连接的系统调用,回收资源对象
这与文件处理是一个道理:内存
f=open('a.txt') #作了两件事,在用户空间拿到一个f变量,在操做系统内核空间打开一个文件 del f #只回收用户空间的f,操做系统的文件还处于打开状态 #因此咱们应该在del f以前保证f.close()执行,即使是没有del,程序执行完毕也会自动del清理资源,因而文件操做的正确用法应该是 f=open('a.txt') 读写... f.close() 不少状况下你们都容易忽略f.close,这就用到了with上下文管理