'''
__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
相当于做了三件事:
- 调用new来创建对象,找了一个变量ret接受new的返回值,这个值表示创建对象的引用
- init(刚刚创建出来的对象的引用),设置一些初始值
- 返回对象的引用
参考:https://blog.csdn.net/weixin_40539952/article/details/103887647