浅谈Python中的“析构”函数

浅谈Python中的“析构”函数

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

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

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

    使用智能指针shared_ptr, uniq_ptr都归结为此类

  • 进程退出,包括主动退出(exit())和异常退出(未捕获信号)

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

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

__del__()

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

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

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

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

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

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

atexit

TODO

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值