2013-05-31 53 views
3

我對python非常陌生,對於幾件事情我不確定。組織小型項目/腳本的Python

  1. 類應該在單個文件中嗎?
  2. 獨立腳本是否有主要方法?如果是這樣,這是如何工作的,因爲我有一個主要的方法,而不是叫
  3. 單元測試目錄通常放在哪裏以及它如何「包含」它正在測試的文件?
+0

1號是個人偏好,不像Java,我認爲它是必需的,在Python中它不是。但從我見過的大多數人將他們的所有類放在一個文件中,只是爲了簡化導入。我寧願導入一件東西,並且'import theClasses',而不是'import class1,class2,class3'。 – TehTris

+0

2號是你想要的。通常人們會在它們的python文件的末尾放置if __name__ ==「__main__」:go()(或者它們的主函數被調用),並且會在它的double點擊或從命令提示符加載 – TehTris

回答

5

地面地塊涵蓋在這裏,你可能會被分裂了這些點到個別問題/查詢得到更好的服務:)

  1. 我會抵制分裂類放入單獨的文件不必要的。有些課程可能會嚴重依賴於其他課程,而我(個人)喜歡將它們保存在同一個文件中。我覺得最好的約定是基於功能創建文件,而不是每個類的單獨文件。

    我從Flaoc和Jinja2等Pocoo項目中獲得了很多靈感。所述的Jinja2源提供的「捆綁」某些相關的類文件內的一個極好的例子:Github

  2. 獨立腳本通常使用類似if __name__ == '__main__',檢查是否直接執行(例如python scriptname.py),然後執行一個函數通常main()事後(感謝Mike糾正我的錯誤)。

    爲了更好地協助解決你的問題main沒有被調用,我建議顯示你正在嘗試使用的代碼。

  3. 有很多不同的方法可以做到這一點,但約定似乎在您的項目中的tests,test,testsuite目錄。這個問題的後半部分非常複雜,因爲Python的導入取決於你的Python項目的結構/類型(它是一個Python包?一個獨立的腳本集合?)和你的PYTHONPATH

    This因爲考慮把測試放在哪裏,所以SO帖子是一個很好的開始,儘管一般的答案似乎是「哪裏最適合你/你的團隊」)。

    在一個稍微相關的說明中,我還建議查看Nose測試框架,因爲它從使用Python測試中刪除了很多樣板。

+0

它不是'__main__'方法。成語是'if __name__ =='__main __''然後調用我的函數,通常稱爲'main()'。 –

+0

@MikeMüller感謝修正邁克,我已經將其納入我的答案。 –

+0

+1用於推薦鼻子。 –

2

我會回答問題1和問題2

1)這要看情況。如果你的課程很小,那麼可以把它們放在同一個文件中。如果他們變大,他們通常會保存在不同的文件中。
2)不,不需要是主要方法。然而,對於一個腳本,這是一個強大的常見的成語:

def main(): 
    # Your code 

# At the bottom of the file 
if __name__ == '__main__': 
    main() 

這樣,你main當文件被運行的腳本只會跑,但是當作爲一個模塊導入,將不會運行。當你導入模塊時,Python只會執行它在函數中遇到的任何代碼,所以如果你想稍後重用一個腳本作爲模塊,這將保護你。

這只是一個成語,main在python中沒有特殊的含義,所以你不必調用它或任何東西。

0
  1. 不必,但如果該類被其他幾個文件/類使用,它應該。
  2. 這是一個很好的做法看What does <if __name__==「__main__」:> do?
  3. 的Python着眼於$ PYTHONPATH是目錄找到模塊的列表,你可以把模塊在這些目錄中的一個子目錄,並與import directoryname.module.導入。您可以通過from directoryname.module import ClassName導入課程。