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进阶教程之循环对象
Aug 30 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
May 08 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
详解Python学习之安装pandas
Apr 16 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
Jun 27 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
python 字典的打印实现
Sep 26 Python
python enumerate内置函数用法总结
Jan 07 Python
python实现井字棋小游戏
Mar 04 Python
python thrift 实现 单端口多服务的过程
Jun 08 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
德劲1104的电路分析与改良
2021/03/01 无线电
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php include加载文件两种方式效率比较
2010/08/08 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
python实现用户名密码校验
2020/03/18 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
区域总监的岗位职责
2013/11/21 职场文书
20岁生日感言
2014/01/13 职场文书
保险专业自荐信范文
2014/02/20 职场文书
婚前协议书
2014/04/15 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书