python3-__init__() 與__new__()的作用
阿新 • • 發佈:2018-11-04
【例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__()將沒有機會執行。