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中的Null模式与桥接模式编程
Feb 02 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
深入理解Python对Json的解析
Feb 14 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
Django集成celery发送异步邮件实例
Dec 17 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 Python
Pycharm及python安装详细教程(图解)
Jul 31 Python
Python读写csv文件流程及异常解决
Oct 20 Python
appium+python自动化配置(adk、jdk、node.js)
Nov 17 Python
python全栈开发语法总结
Nov 22 Python
python实现简单的三子棋游戏
Apr 28 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
PHP学习 运算符与运算符优先级
2008/06/15 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
php调整服务器时间的方法
2015/04/03 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
php生成mysql的数据字典
2016/07/07 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
你必须知道的Javascript知识点之"this指针"的应用
2013/04/23 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
js实现简单的验证码
2015/12/25 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
解决python大批量读写.doc文件的问题
2018/05/08 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
超30万乐谱下载:Musicnotes.com
2016/09/24 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
室内设计专业毕业生求职信
2014/05/02 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
Java实现房屋出租系统详解
2021/10/05 Java/Android
Python echarts实现数据可视化实例详解
2022/03/03 Python