class Foo: def __init__(self): self.name="wes" def __del__(self): print("in __del__") def __delattr__(self, item): print("in delattr") f1=Foo() print(f1.name) print(f1.__dict__) del f1.name #触发__delattr__ #程序执行完,触发__del__,回收内存 自动触发 #当程序结束时,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上下文管理