2010-01-27 75 views
9

創建對象時會調用__init__()函數。 在創建對象之後再次調用對象__init__()函數可以嗎?Python:在同一實例上多次調用__init __()

instance = cls(p1=1, p2=2) 
# some code 
instance.__init__(p1=123, p2=234) 
# some more code 
instance.__init__(p1=23, p2=24) 

爲什麼會在對象上任何人想呼叫__init__()在已經產生的?

很好的問題。我想重新初始化實例的字段。

+1

這是一個可怕的設計。試圖閱讀和維護你的代碼的人會感到困惑。請使用普通名稱的普通方法。讓'__init__'調用另一個方法(例如'reset'),這樣就清楚發生了什麼。 – 2010-01-27 11:25:41

回答

10

在對象上多次調用__init__就可以了,只要__init__用您想要獲得的效果編碼即可(無論可能如何)。一個典型的情況發生(所以你最好編碼__init__適當! - )是當你的班級的__new__方法返回類的一個實例:確實原因__init__被調用在返回的實例(爲什麼可能是如果你通過你的__new__來保留「回收」實例,那麼第二個或第二十個時間! - )。

1

據我所知,它不會引起任何問題(編輯:super(...).__init__(...)的潔淨利用的建議),但我認爲有一個reset()方法,把它無論是在__init__(),當你需要重新設置會更乾淨。

3

你可以,但它有點破壞__init__打算做的事情。很多Python實際上只是一種慣例,所以你不妨遵循這個規則,並期望__init__只能被調用一次。我建議創建一個名爲initreset的函數或設置實例變量的函數,當您想要重置實例時使用該函數,並且__init__只需調用init。這絕對看起來更健全:

x = Pt(1,2) 
x.set(3,4) 
x.set(5,10) 
+0

+1:請不要調用'__init__'這違反了每個人閱讀和維護代碼的期望。這只是糟糕的設計。 – 2010-01-27 11:24:21

相關問題