1.构造方法包括创建对象和初始化对象,在python当中,分为两步执行:先执行__new__方法,然后执行__init__方法;
2.__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。
3.__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。
总结:也就是,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。
例如:
class A:
def __init__(self):
print(self)
print("self id :",id(self))
print("in __init__")
def __new__(cls, *args, **kwargs):
print("cls id",id(cls))
print("in __new__")
ret = object.__new__(cls)
print(ret)
print("ret id: ",id(ret))
return ret
print("A id",id(A))
aa = A()
结果:
A id 2325495978840
cls id 2325495978840
in __new__
<__main__.A object at 0x0000021D726FCA20>
ret id: 2325497236000
<__main__.A object at 0x0000021D726FCA20>
self id : 2325497236000
in __init__