__new__与__init__区别

'''
__new__ AND __init__
构造方法=创建对象+初始化对象=__new__+__init__

__new__方法是在实例创建之前被调用,是一个静态方法,主要的功能就是创建一个类的实例并返回

__init__方法是在实例创建之后被调用,主要的功能是设置实例的一些属性初始值

运行过程:__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数(self),然后__init__给这个实例(self)设置一些参数

'''

class Test():

    def __init__(self):#第8步
        print("..init...开始了")
        print(self)#第9步
        self.a="hao"#第10步
        print("这是init方法执行完了") #第11步
    def __new__(cls): #第2步
        print("new开始了")
        print(id(cls))#第3步
        print("这是new方法")#第4步
        ret=object.__new__(cls)
        print(ret)#第5步
        print("new执行完了")
        return ret #第6步
print(id(Test))  #第一步
print("...")
test=Test()#第7步
print("====")
print(id(test))#第12步

==new
2178735992600
...
new开始了
2178735992600
这是new方法
<__main__.Test object at 0x000001FB4032EF88>
new执行完了
..init...开始了
<__main__.Test object at 0x000001FB4032EF88>
这是init方法执行完了
====
2178625499016

相当于做了三件事:

  1. 调用new来创建对象,找了一个变量ret接受new的返回值,这个值表示创建对象的引用
  2. init(刚刚创建出来的对象的引用),设置一些初始值
  3. 返回对象的引用

参考:https://blog.csdn.net/weixin_40539952/article/details/103887647

原文地址:https://www.cnblogs.com/longyi2020/p/14448792.html