__del__

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上下文管理
原文地址:https://www.cnblogs.com/wuxi9864/p/9964482.html