python析构函数

python析构函数 

析构函数,这样在类实例所占内存被回收时,系统就会自动调用析构函数。通常,我们会在析构函数中做一些“清理”工作,比如释放资源,关闭连接,或者发送一个网络包到其它服务以告知其状态变化等等。

class Role:
    def __init__(self, name, role, weapon, life_value=100, money=15000):
        #构造函数
        #在实例化时做一些类的初始化的工作
        self.name = name #r1.name=name实例变量(静态属性),作用域就是实例本身
        self.role = role
        self.weapon = weapon
        self.__life_value = life_value
        self.money = money
    def __del__(self):
        pass #print("%s 彻底死了。。。。" %self.name)

而类实例所占内存被回收,包含以下几种情况:

  • 局部变量离开它的作用域
  • 动态分配的内存被手动回收(new 和delete

    使用智能指针shared_ptruniq_ptr都归结为此类

  • 进程退出,包括主动退出(exit())和异常退出(未捕获信号)(程序退出的时候也会执行)

以上所有情况都会促使类的析构函数被自动调用。当然,如果是机器挂了,那就没办法了。。。

那么在Python中,如何实现“析构函数”的功能呢?

__del__()

Python提供的最接近“析构函数”的概念,应该就是__del__()解构器方法了。使用方法如下:

class Test(object):
    def __del__(self):
        print '__del__ called'

但是,Python中所有的变量其实都是对内存对象的引用。只有当一个内存对象的引用计数降为0,即没有被变量引用时,解释器的垃圾回收机制才会回收这块内存。只有当内存被真正回收时,__del__方法才会被调用。

我们在命令行下进行如下测试:

>>> t1 = Test()
>>> t2 = Test()
>>> del t1
>>> del t2

只有在对t1和t2都执行del操作后,__del__才被调用。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值