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/ironpython:从入门到精通
Oct 02 Python
python正则表达式re模块详解
Jun 25 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
Python调用C语言的方法【基于ctypes模块】
Jan 22 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
django 控制页面跳转的例子
Aug 06 Python
pycharm修改file type方式
Nov 19 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
Python用dilb提取照片上人脸的示例
Oct 26 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
图象函数中的中文显示
2006/10/09 PHP
多重?l件?合查?(二)
2006/10/09 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
php实现的验证码文件类实例
2015/06/18 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
python将字符串转换成数组的方法
2015/04/29 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
客服文员岗位职责
2013/11/29 职场文书
大学军训感言400字
2014/03/11 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
物业工程部岗位职责
2015/02/11 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
Java版 简易五子棋小游戏
2022/05/04 Java/Android