day6-析构函数
定义
在实例销毁的时候调用的函数
语法
作用:例如server端接受很多客户端的连接,当你手动屏蔽你的sever端的时候,这个时候客户端还在正常的连接,如果sever端用类写的,你就可以delete server端的同时,在__del__()写一些东西,说去close掉很多客户端的连接。说白了,析构函数就是做一些程序的收尾工作。
class Role(object): nationality = 'Janpan' def __init__(self, name): self.name = name def buy_gun(self, gun_name): print("just bought %s" % gun_name) def __del__(self): #定义析构函数,它在对象消逝的时候被调用 print("del.....run....") d1 = Role("Dick") del d1 import time time.sleep(5) #输出 del.....run....
解析:在del d1时,我们以为已经把该变量d1从内存中删除了,其实只是删除了变量名到真正变量数据的内存的关系,就像每一个房间都有门牌号一样, del d1相当于把这个门牌号摘掉,就像上面的del d1,其实python中有自动垃圾回收机制,会定时刷新内存,只要这个对象的引用被摘掉时,就会自动执行删除该数据的内存空间,而析构函数就是在引用被清空之后(实例被销毁之后)会自动执行删除该数据释放内存空间。
小结
- 当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。
- __del__()也是可选的,如果不提供,则Python 会在后台提供默认析构函数
- 当对象不再被使用时,__del__方法运行,但是很难保证这个方法究竟在 什么时候 运行。如果你想要指明它的运行,你就得使用del语句
- 如果要显式的调用析构函数,可以使用del关键字,方式如下:
del 对象名