2010-08-27 48 views
8

可能重複:
Python's use of __new__ and __init__ ?重寫__new__和__init__在Python

就我的理解,__init__是從Java中的構造不同,因爲__init__僅初始化有一個對象已經被隱含地構建(因爲__init____new__之後被調用)。但是,我需要定義的所有東西都使用了Java中的「構造函數」的後一個屬性。程序員想要重寫__new__的情況是什麼?

編輯:爲了記錄在案,我問一方面是因爲我不知道會是什麼優勢/劣勢在接受這個問題的答案使用一個單獨的類方法來覆蓋對比:

Moving Beyond Factories in Python

+0

在我眼中不完全相同 – abyx 2010-08-27 12:50:53

回答

11

__new__實際發生在對象存在之前。這是這種類型的靜態方法。使用__new__是當你想控制新對象的創建時,例如一個單身。如果你的__new__總是返回一個對象的同一個實例,那麼它就是一個單例。你不能這樣做,__init__

一般來說,在「Python作爲圭多預期它是」你不應該使用__new__超過每月一次:)

+0

這很有道理。那麼這個(接受的答案在下面)一個重寫__new__也適合的情況? http://stackoverflow.com/questions/3571773/moving-beyond-factories-in-python – chimeracoder 2010-08-27 12:28:59

+0

@thebackhand看起來像它 – abyx 2010-08-27 12:51:09

3

__new__是創建新的對象實例,__init__是對其進行初始化。

我想如果你設計一個不可變的類型,你必須在__new__中初始化它,例如參見namedtuple(也是Python's use of __new__ and __init__?)。