对象的生命过程:创建、初始化、使用、垃圾回收,不同的阶段由不同的方法(角色)负责执行。
__new__
方法 负责创建对象, 这个对象会传递给 __init__
方法中定义的 self 参数,以便实例对象可以被正确地初始化。
__init__
方法 负责对象的初始化 ,系统执行该方法前,该对象已经存在。 如果 __new__
方法不返回值(或者说返回 None)那么 __init__
将不会得到调用。此外,Python 还规定,__init__
只能返回 None 值,否则报错。
__call__
方法,不得不先提到一个概念,就是可调用对象(callable),我们平时自定义的函数、内置函数和类都属于可调用对象,但凡是可以把一对括号()
应用到某个对象身上都可称之为可调用对象,判断对象是否为可调用对象可以用函数 callable
。 如果在类中实现了 __call__
方法,那么实例对象也将成为一个可调用对象
上面三个方法都称为魔术方法,因为这些方法不是由用户调用的,而是由解释器调用的。
此外,对象的回收工作是由GC(Garbage Collection)完成的,GC也是解释器的一部分。现代语言的垃圾回收算法都可以写好多内容。
参考: