【例1】
class ClassA(object):
def __new__(cls, *args, **kwargs):
object = super(ClassA, cls).__new__(cls)
print("in New")
return object
def __init__(self, *args, **kwargs):
print("in init")
ClassA()
输出:
in New
in init
可以看出先调用__new__() 再调用 __init__()
【例2】
class ClassA(object):
def __new__(cls, *args, **kwargs):
object = super(ClassA, cls).__new__(cls)
print("in New")
#return object
def __init__(self, *args, **kwargs):
print("in init")
ClassA()
(只在例1的基本上注掉__new__()中的return object——不返回实例)。
输出:
in New
__init__() 没被调用!
【作用】:
__new__():真正的构造函数,负责返回实例;
__init__():初始化函数,负责在得到实例后进一步初始化一些实例变量。
如果__new__()是类函数,一定会执行;__init__()是实例函数,如果__new__()未返回实例,那么__init__()将没有机会执行。