2009-11-26 63 views
37

我來自一個背景,我通常每個類創建一個文件。我也組織目錄下的常用類。這種做法對我來說很直觀,已經證明在C++,PHP,JavaSript等方面是有效的。組織模塊和包裝的Python方法

我在將這個隱喻帶入Python時遇到了困難:文件不再是文件,而是正式的模塊。在一個模塊中只有一個類是不正確的---大多數類都是自己無用的。如果我有automobile.pyAutomobile課,那麼始終將它也引用爲automobile.Automobile似乎很愚蠢。

但是,與此同時,它似乎不正確拋出一噸碼成一個文件,並收工。顯然,一個非常複雜的應用程序應該有超過5個文件。

什麼是正確的---或pythonic ---的方式? (或者如果沒有正確的方法,你喜歡什麼樣的方式,爲什麼?)我應該在Python模塊中投入多少代碼?

+0

Duplicate:http://stackoverflow.com/questions/1642975/folder-and-file-organization-for-python-development – 2009-11-26 13:12:21

+1

Duplicate:http://stackoverflow.com/questions/106896/how-many-python - 班-應該-I-把功能於一身的文件 – 2009-11-26 13:15:20

回答

31

想在「包裝邏輯單元」的條款 - 這可能是一個類,但更多的是將一組密切合作類。類(或模塊級函數 - 當模塊級函數也可以作爲選擇時,始終使用靜態方法不要「在Python中執行Java」 - )可以根據此標準進行分組。基本上,如果A的大多數用戶也需要B,反之亦然,A和B應該可能在同一個模塊中;但是如果許多用戶只需要其中的一個而不需要其他用戶,那麼他們應該可能位於不同的模塊中(可能在相同的包中,即其中包含__init__.py文件的目錄)。

標準Python庫,而遠非完美,往往反映了(大部分)相當不錯的做法 - 讓你可以從它舉例大多學習。例如,threading模塊當然限定Thread類...但它也保持同步原語類如鎖,事件,條件和信號,並且可以通過螺紋的操作來產生的異常類(和幾更多的東西)。它處於合理大小的上限(800行,包括空格和文檔字符串)以及一些與線程相關的重要功能,例如Queue已放置在單獨的模塊中,但它是一個很好的示例,說明了它仍然有多大功能打包成一個模塊。

7

如果你要堅持你的一類每個文件系統(這是合乎邏輯的,不要誤會我的意思),你可能會做這樣的事情,以避免提及automobile.Automobile

from automobile import Automobile 
car = Automobile() 

然而,正如cobbal提到,每個文件超過一類是在Python中很常見。無論哪種方式,只要你選擇一個合理的系統並持續使用它,我認爲任何Python用戶都不會對你生氣:)。

4

在一箇中等規模的項目,我發現自己有幾套密切相關的類。現在幾個這樣的組合被分組成文件;例如,低級網絡類都在單個network模塊中。然而,一些最大的類已經被分解到他們自己的文件中。

也許開始下降,從一類每個文件的歷史,路徑的最好辦法是採取,你通常會放置在同一個目錄中的類,而是讓他們在同一個文件中。如果該文件看起來太大,請將其分割。

8

如果您是從C++的角度來看,您可以查看類似於.so或.dll的python模塊。是的,它們看起來像源文件,因爲python是腳本化的,但它們實際上是可加載的特定功能庫。

另一個可能有用的隱喻是你可能會將python模塊看作命名空間。