__new__() 是一种负责创建类实例的静态方法,它无需使用 staticmethod 装饰器修饰,且该方法会优先 __init__() 初始化方法被调用。
直接上例子
class Test(object):
def __new__(cls,*args,**kwargs):
print("Test::__new__()")
return super().__new__(cls)
def __init__(self):
print("Test::__init__()")
class People(object):
def __new__(cls,*args,**kwargs):
print("People::__new__()")
return super().__new__(cls)
# return Test()
def __init__(self,name,age):
print("People::__init__()",name,age)
self.name = name
self.age = age
People("sandy",100)
__new__() 通常会返回该类的一个实例,但有时也可能会返回其他类的实例,如果发生了这种情况,则会跳过对 __init__() 方法的调用
class People(object):
def __new__(cls,*args,**kwargs):
print("People::__new__()")
# return super().__new__(cls)
return Test()
def __init__(self,name,age):
print("People::__init__()",name,age)
self.name = name
self.age = age
创建对象时,Python解析器先调用__new__返回对象 然后调用该对象的__init__()方法,并且解析器把这个对象以及参数传递到__init__()函数之中,这就完成了 创建对象并且初始化的操作