分享

浅谈Python中的“析构”函数

 quasiceo 2017-08-14

熟悉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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多