在 Python 中,当你创建一个类的实例并调用它时,涉及到 __new__、__init__ 和 __call__ 时,它们的执行顺序如下:
__new__方法:__new__方法是在实例创建之前调用的。它的主要作用是创建并返回一个新的实例。如果__new__返回一个实例,那么接下来会调用__init__方法;如果__new__返回None,则不会调用__init__方法。__init__方法:__init__方法是在实例创建之后调用的。它的主要作用是对实例进行初始化,可以在这里进行属性的设置等操作。__init__方法不需要返回值。__call__方法: 如果一个类的实例对象被调用,那么 Python 解释器会检查是否存在__call__方法。如果存在,则调用这个方法。__call__方法允许类的实例像函数一样被调用,接收参数并执行特定的操作。- 下面是一个简单的示例,演示了这三者的执行顺序:
class MyClass:
def __new__(cls, *args, **kwargs):
print("__new__ is called")
instance = super(MyClass, cls).__new__(cls)
return instance
def __init__(self, *args, **kwargs):
print("__init__ is called")
def __call__(self, *args, **kwargs):
print("__call__ is called")
# 创建实例
obj = MyClass()
# 调用实例
obj()
可以理解为,面相对象在创建对象的时候,先用__new__返回返回一个实例对象,里面没有东西,然后__init__把一些参数给加进去,最后才会执行__call__方法