13.5 实例
如果说类是一种数据结构定义类型,那么实例则声明了一个这种类型的变量。实例是这些主要用在运行期时的对象,类被实例化得到实例,该实例的类型就是这个被实例化的类。
13.5.2 __init__()“构造器”方法
当类被调用,实例化的第一步是创建实例对象。一旦对象创建了,Python检查是否实现了__init__()方法。默认情况下,如果没有定义(或覆盖)特殊方法__init(),对实例不会施加任何特别的操作。任何所需的特定操作,都需要程序员实现__init__(),覆盖它的默认行为。如果__init__()没有实现,则返回它的对象,实例化过程完毕。
如果__init__()已经被实现,那么它将被调用,实例对象作为第一个参数(self)被传递进去,像标准方法调用一样。把创建实例的调用当成是对构造器的调用。
总之,(a)你没有通过调用new来创建实例,你也没有定义一个构造器。是Python为你创建了对象;(b)__init__(),是在解释器为你创建一个实例后调用的第一个方法,在你开始使用它之前,这一步可以让你做些准备工作。
13.5.3 __new__()“构造器”方法
与__init__()相比,__new__()方法更像一个真正的构造器。
解释器调用类的__new__()方法,一个静态方法,并且传入的参数是类实例化操作时生成的。
__new__()必须返回一个合法的实例,这样解释器在调用__init__()时,就可以把这个实例作为self传给它。
13.5.4 __del__‘’解构器“方法
有一个相应的特殊解构器(destructor)方法名为__del__()。然而,由于Python具有垃圾对象回收机制(靠引用计数),这个函数要直到该实例对象所有的引用都被清除掉后才会执行。Python中的解构器是在实例释放前提供特殊处理功能的方法,它们通常没有被实现,因为实例很少被显式释放。
解构器只能被调用一次,一旦引用计数为0,则对象就被清除了。这非常合理,因为系统中任何对象都只被分配及解构一次。
总结:
1. 不要忘记首先调用父类的__del__()。
2. 调用del x不表示调用了x.__del__(),它仅仅是减少x的引用计数。
3. 尽量不要去实现__del__()。
分享到:
相关推荐
第3章 面向对象编程 第4章 高级类特性1 第5章 高级类特性2 第6章 异常处理 第7章 Java集合 第8章 泛型 第9章 注解&枚举 第10章 IO 第11章 多线程 第12章 Java常用类 第13章 Java反射 第14章 网络编程
C++程序设计教程 第11章 面向对象编程(共21页) C++程序设计教程 第12章 多态(共8页) C++程序设计教程 第13章 抽象类(共2页) C++程序设计教程 第14章 模板(共32页) C++程序设计教程 第15章 异常(共5页)
第13章 容器和泛型.pptx 第14章 流与文件(1).pptx 第14章 流与文件(2).pptx 第15章 网络编程.pptx 第1章 Java概述.pptx 第2章 Java基础.pptx 第3章 数组.pptx 第4章 类和对象(1).pptx 第4章 类和对象(2)....
第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-Scala编程详解:函数式编程 共14页 第17讲-Scala编程...
13.1 TCP/IP协议简介 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第4页。 13.1 TCP/IP协议简介 底层网络 网络层 传输层 应用层 底层网络协议 网页浏览 文件...
面向对象的Java网络编程 \chap03 提供了本书第3章的范例源程序; \chap04 提供了本书第4章的范例源程序; \chap05 提供了本书第5章的范例源程序; \chap06 提供了本书第6章的范例源程序; \chap07 ...
Python从入门到精通 第4章 流程控制语句.ppt Python从入门到精通 第5章 列表与元组.ppt Python从入门到精通 第6章 字典与集合.ppt Python从入门到精通 第7章 字符串.ppt Python从入门到精通 第8章 Python中使用正则...
《C++面向对象多线程编程》共分13章,全面讲解构建多线程架构与增量多线程编程技术。第1章介绍了用于构建面向对象程序的不同类型C++组件,以及如何使用这些组件来构建多线程架构。第2、3、4章简要介绍进程、线程、多...
第三章Delphi面向对象编程思想 第九章对话框 第二章Delphi语法基础 第五章VCL组件应用 第八章VCL组件应用续2 第六章VCL组件应用续1 第十一章文件操作和管理 第十三章数据库编程 第十二章图形图像和多媒体技术 第十章...
第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-Scala编程详解:函数式编程 共14页 第17讲-Scala编程...
希望通过电子书了解了本书第一版内容并对其感兴趣的读者能够购买《Java面向对象编程》最新的第二版,相信它一定不会让你失望。呵呵,这也算是对矢志投身中国Java编程普及教育的孙老师的一点支持吧。。。
第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-Scala编程详解:函数式编程 共14页 第17讲-Scala编程...
第4章 类剖析 第5章 类设计指导原则 第6章 利用对象实现设计 第7章 掌握继承和组合 第8章 框架与重用:使用接口和抽象类实现设计 第9章 构建对象 第10章 用UML创建对象模型 第11章 对象和可移植数据:XML 第...
matlab面向对象编程教程-A Guide to MATLAB Object-Oriented Programming - Register, CRC 2007.rar 最近想好好学学matlab面向对象编程的一些东西(以前也自学过,但现在想系统学一下,libsvm工具箱几乎已经没有...
第13章 基于thinter的GUI编程.ppt 第14章 Python的高级技术.ppt 第15章 数据库的应用.ppt 第16章 网络编程的应用.ppt 第17章 CGI程序设计.ppt 第18章 Web网站编程.ppt 第19章 经典游戏应用-开发弹球游戏.ppt 第20章 ...
第六章 面向对象程序设计 97 一、选择题 97 二、填空题 118 三、判断题 120 四、编程题 123 第七章 数据库的连接 129 一、选择题 129 二、填空题 131 三、判断题 131 四、编程题 131 第八章 多线程 133 一、填空题 ...
第十三章 面向对象编程 第十四章 执行环境 第2部分 高级主题 第十五章 正则表达式 第十六章 网络编程 第十七章 网络客户端编程 第十八章 多线程编程 第十九章 图形用户界面编程 第二十章 Web编程 第二十一章...
面向对象程序设计-Java(张白一) 第1章 Java系统环境概述 第2章 Java语言基础 第3章 程序流程控制 第4章 类与对象 第5章 消息、继承与多态 第6章 数组 第7章 字符串类 第8章 文字与图形GUI设计 第9章 常用组件GUI设计...
第13章 对象与因特网 197 13.1 分布式计算的演进 197 13.2 基于对象的脚本语言 197 13.3 JavaScript验证示例 200 13.4 Web页面中的对象 202 13.4.1 JavaScript对象 202 13.4.2 Web页面控件 204 13.4.3 声音...
第13章 面向对象编程 第14章 执行环境 第2部分 高级主题 第15章 正则表达式 第16章 网络编程 第17章 网络客户端编程 第18章 多线程编程 第19章 图形用户界面编程 第20章 Web编程 第21章 数据库编程 第22章...