__new__与__init__

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__

原文地址:https://www.cnblogs.com/wenshu/p/12323885.html