Python构造函数及解构函数介绍


Posted in Python onFebruary 26, 2015

python 有一个相应的特殊解构器(destructor)方法名为__del__()。然而,由于python具有垃圾对象回收机制(靠引用计数),这个函数要直到该实例对象所有的引用都被清除掉后才会被执行。python中的解构器是在实例释放前提供特殊处理功能方法,它们通常没有被实现,因为实例很少被显式释放。

在下面的例子中,我们分别创建(并覆盖) __init__()和__del__()构造器及解构函数,然后,初始化类并给同样的对象很多别名。id()内建函数可用来确定引用同一对象的三个别名。最后一步是使用del语句清除所有的别名,显示何时调用了多少次解构器。

#!/usr/bin/env python

#coding=utf-8

 

class P():

    def __del__(self):

        pass

 

class C(P):

    def __init__(self):

        print 'initialized'

    def __del__(self):

        P.__del__(self)

        print 'deleted'

 

 

c1 = C()

c2 = c1

c3 = c1

 

print id(c1), id(c2), id(c3)

 

del c1

del c2

del c3

python没有提供任何内部机制来跟跟踪一个类有多少个实例被创建了,或者记录这些实例是什么东西。如果需要这些功能,可以显式加入一些代码到类定义或者__init__()和__del__()中去。最好的方式是使用一个静态成员来记录实例的个数。靠保存它们的引用来跟踪实例对象是很危险的,因为你必须合理管理这些引用,不然你的引用可能没办法释放(因为还有其他的引用)!看下面的例子:

class InstCt(object):

    count = 0

    def __init__(self):

        InstCt.count += 1

    def __del__(self):

        InstCt.count -= 1

    def howMany(self):

        return InstCt.count

 

a = InstCt()

b = InstCt()

print b.howMany()

print a.howMany()

del b

print a.howMany()

del a

print InstCt.count

所有输出:

initialized

4372150104 4372150104 4372150104

deleted

********************

2

2

1

0
Python 相关文章推荐
Python入门之三角函数atan2()函数详解
Nov 08 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
python实现装饰器、描述符
Feb 28 Python
python调用百度语音REST API
Aug 30 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
Jan 15 Python
python实现多张图片拼接成大图
Jan 15 Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 Python
Django 配置多站点多域名的实现步骤
May 17 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
Python 将json序列化后的字符串转换成字典(推荐)
Jan 06 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 Python
python链表类中获取元素实例方法
Feb 23 Python
python中的__slots__使用示例
Feb 26 #Python
Python map和reduce函数用法示例
Feb 26 #Python
Python中运行并行任务技巧
Feb 26 #Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 #Python
Python THREADING模块中的JOIN()方法深入理解
Feb 18 #Python
python持久性管理pickle模块详细介绍
Feb 18 #Python
Python中暂存上传图片的方法
Feb 18 #Python
You might like
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
php常量详细解析
2015/10/27 PHP
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
简单实现python收发邮件功能
2018/01/05 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
初中生自我鉴定
2014/02/04 职场文书
简历里的自我评价范文
2014/02/24 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
校长创先争优承诺书
2014/08/30 职场文书
2014年教学工作总结
2014/11/13 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
党员进社区活动总结
2015/05/07 职场文书
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers