`
javatome
  • 浏览: 827152 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

第13章 面向对象编程(4)

 
阅读更多

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__()。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics