【语法】内置方法 __new__ 、 __init__、__call__
在Python中,__new__、__init__ 和 __call__ 是三个特殊的方法,它们分别在不同的场景中被调用,并扮演着不同的角色。
__new__方法
__new__ 是一个静态方法,它在类实例化时首先被调用。它的主要职责是创建类的实例。在Python中,__new__ 是唯一一个可以覆盖对象实例化过程的方法。通常,__new__ 方法会返回类的实例,但也可以返回其他类型的对象。如果__new__没有显式地返回对象,那么默认会返回None,这将导致__init__方法不会被调用。
在单例模式中,__new__方法被重写以确保只有一个实例被创建。
__init__方法
__init__ 是一个实例方法,它在类实例化并且__new__方法成功返回实例后被调用。它的主要职责是对实例进行初始化,即设置实例的初始状态或属性。__init__方法不会返回任何值(实际上,它也不能返回除了None之外的其他值,否则会导致TypeError)。
需要注意的是,即使__new__方法返回了一个已经存在的实例,__init__方法仍然会被调用(在Python 3中)。但是,在大多数情况下,我们希望在单例模式中避免对已经初始化的实例进行重复初始化。因此,通常会在__init__方法中添加一些检查来确保它只运行一次。
__call__方法
__call__ 方法允许一个类的实例像函数那样被调用。当实例后面跟着括号(即调用语法)时,Python会自动调用该实例的__call__方法。这使得类的实例可以表现得像函数一样,接收参数并返回结果。
__call__ 方法通常用于实现可调用对象,如函数式编程中的高阶函数或闭包。它也可以用于创建自定义的类,这些类可以像内置函数那样被调用。
总结来说,__new__、__init__ 和 __call__ 是Python中三个重要的特殊方法,它们分别负责类的实例化、实例的初始化和使实例可调用。理解这三个方法的区别和用途对于深入掌握Python的类和对象模型至关重要。
浙公网安备 33010602011771号