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

本文详细介绍了Python中类的实例化过程,包括实例、构造器方法__init__()和__new__()的区别与联系,以及解构器方法__del__()的作用与注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值