1. 程式人生 > >python3-__init__() 與__new__()的作用

python3-__init__() 與__new__()的作用

【例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__()將沒有機會執行。