很多同學都以為Python中的__init__是構造方法,但其實不然,Python中真正的構造方法是__new__。__init__和__new__有什麼差別?本文就來探讨一下。
class Person(object):
def __init__(self, name, age):
print("in __init__")
self._name = name
self._age = age
p = Person("Wang", 33)
上面的代碼會輸出如下的結果
in __init__
<__main__.Person object at 0x7fb2e0936450>
實際上,__init__函數并不是真正意義上的構造函數,__init__方法做的事情是在對象建立好之後初始化變量。真正建立執行個體的是__new__方法。我們來看下面的例子
class Person(object):
def __new__(cls, *args, **kwargs):
print("in __new__")
instance = object.__new__(cls, *args, **kwargs)
return instance
def __init__(self, name, age):
print("in __init__")
self._name = name
self._age = age
p = Person("Wang", 33)
上面的代碼輸出如下的結果
in __new__
in __init__
上面的代碼中執行個體化了一個Person對象,可以看到__new__和__init__都被調用了。__new__方法用于建立對象并傳回對象,當傳回對象時會自動調用__init__方法進行初始化。__new__方法是靜态方法,而__init__是執行個體方法。