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中DJANGO简单测试实例
May 11 Python
python转换字符串为摩尔斯电码的方法
Jul 06 Python
Python2与python3中 for 循环语句基础与实例分析
Nov 20 Python
详解Python中 sys.argv[]的用法简明解释
Dec 20 Python
好的Python培训机构应该具备哪些条件
May 23 Python
Random 在 Python 中的使用方法
Aug 09 Python
Python编程flask使用页面模版的方法
Dec 28 Python
python调用外部程序的实操步骤
Mar 04 Python
python判断自身是否正在运行的方法
Aug 08 Python
Python threading.local代码实例及原理解析
Mar 16 Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 Python
Python常见反爬虫机制解决方案
Jun 01 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
mysql 字段类型说明
2007/04/27 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
php获取twitter最新消息的方法
2015/04/14 PHP
PHP高并发和大流量解决方案整理
2021/03/09 PHP
js 小贴士一星期合集
2010/04/07 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
python设置检查点简单实现代码
2014/07/01 Python
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
在python中求分布函数相关的包实例
2020/04/15 Python
python和c语言哪个更适合初学者
2020/06/22 Python
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
业务员薪酬管理制度
2014/01/15 职场文书
文明村创建实施方案
2014/03/27 职场文书
家长对学生的评语
2014/04/18 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年社区工作总结
2014/11/18 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
银行求职信范文
2019/05/13 职场文书
浅析Python实现DFA算法
2021/06/26 Python
MySQL 逻辑备份 into outfile
2022/05/15 MySQL