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 对象名
posted @ 2017-08-05 11:24  Mr.hu  阅读(108)  评论(0编辑  收藏  举报