2016-12-14 74 views
0

什麼是Python中的良好做法,當我需要初始化包含,例如,大陣列的對象,它應該在對象創建過程中充滿了計算值。在Python中是否可以在構造函數中執行此操作,或者這是一種代碼異味,我應該使用Factory來代替?這裏Pythonic的方式是什麼?重物初始化在Python

+0

數組的內容是否爲常量,或者對象的每個實例是否都有唯一的數組? FWIW,這個問題可能會被視爲「主要基於意見」。假設每個實例都獲得一個唯一的數組,我會直接在'__init__'中初始化它,如果它可以在一行或兩行中完成的話,否則我會調用另一個方法來初始化它。 –

+0

- 對象的每個實例都獲得一個獨特的數組,其大小和內容在對象創建期間計算。在c#中,我將爲此對象創建創建靜態方法CreateX並隱藏構造函數,但在Python中沒有私有構造函數,所以我懷疑。 – Brans

+0

您是否打算能夠透明地更改正在創建的對象的類別?如果是,請使用工廠模式。否則,我會考慮,如果將計算外包給工廠類,代碼是否更清晰(更易讀)。 – abukaj

回答

1

如果您可以初始化在幾個清晰的代碼行的數組,那麼這是相當好的直接在__init__方法初始化。否則,請使用單獨的方法對其進行初始化。

Python中確實有靜態方法和類方法(見here對於一些簡單的例子)。您可以使用一個靜態方法來初始化數組,但如果初始化方法使用實例的屬性在計算中你可能也使它成爲一個正常的方法,否則你將需要通過它的值作爲參數。

Python沒有私有方法,但通常指定一個方法用於私人使用該類,方法是爲其指定一個以單個前導下劃線開頭的名稱,例如_init_my_array。如果你的班級的一個用戶想要調用他們的方法,但是他們知道這樣做可能會導致班級行爲失常,除非你知道你在做什麼,否則調用這種「私人」方法通常不是個好主意。 。