class Dog(object):
def __init__(self):
print("init方法")
def __del__(self):
print("del方法")
def __str__(self):
print("str 方法")
def __new__(cls): #cls
#print(id(cls))
print("new方法")
return object.__new__(cls)
XTQ = Dog()
当执行 xtq = Dog() 时,首先执行 等号右边"Dog()"
(1)调用__new__方法创建对象,然后找一个特殊变量接收__new__ 返回值,这个返回值就是创建对象的引用;(而这个特殊变量指向这个对象 )
(2)这个对象调用__init__(self)方法,传入对象引用,self 指向刚刚创建的对象(__new__ 方法返回的特殊变量传给self)
(3)返回对象的引用 这个XTQ自然就指向了这个对象
总结:__new__方法只负责创建,__init__方法只负责初始化,
NOTE:不是说在这里调用__new__方法,__new__方法自己调用__init__方法,而是先调用__new__方法,__new__方法执行完后保存其返回值,再去调用__init__方法