Pythonのソースコードを整理するにはどうすればよいですか?[閉まっている]


99

私はPythonを使い始めており(今こそ試してみる時期です)、いくつかのベストプラクティスを探しています。

私の最初のプロジェクトは、複数のスレッドでコマンドライン実験を実行するキューです。非常に長いmain.pyファイルを取得し始めていますが、分割したいのですが。一般的に、私が探しているのは:Pythonプログラマーはどのようにして複数のソースファイルを整理するのですか?あなたのために働く特定の構造はありますか?

私の具体的な質問は次のとおりです。

  1. 各クラスを個別のファイルに含める必要がありますか?
  2. ソースコードに関連する単体テストを整理するにはどうすればよいですか?
  3. ドキュメントのコメント、特にコマンドライン操作のコメントはどこに置くべきですか?
  4. 複数のディレクトリを使用している場合、それらの間でクラスをインポートするにはどうすればよいですか?

私はおそらく、試行錯誤によって自分の結論のいくつかをここに引き出すことができますが、むしろ良いものから始めたいと思います。


4
これはあなたのコードを整理に関する物事のカップルを説明しますdocs.python.org/tutorial/modules.html
ニコラSmiljanić

2
これは、python docsからのより有用な情報です。<br> docs.python.org/3/tutorial/modules.html#packages
rda3mon

11
この質問は、特にPythonコミュニティで広く受け入れられている規約を求めています。答えは意見の問題ではありませんが、ほとんどの答えと同様に、時間とともに変わる可能性があります。これを再度開くか、少なくとも元の回答を元に戻すことをお勧めします。
Andres Jaan Tack 14

回答:


32

記事エリックは指摘し、それが大きなPythonのコードベースを組織の詳細をカバーしているため素晴らしいですし。

ここからGoogleにアクセスし、1つの大きなソースファイルを複数の管理しやすいファイルに分割する方法を見つけようとしている場合は、プロセスを簡単に要約します。

現在、次のファイルにすべてが含まれているとしますmain.py

  • 同じフォルダーに別のソースファイルを作成します(utils.pyこの例では、私たちのものとしましょう)。
  • あなたの中から必要なものは何でもクラス、関数、ステートメント、など移動main.pyutils.py
  • 中には、main.py上部にある単一の行を追加します。import utils

概念的には、これはutils別のソースファイルで呼び出される新しいモジュールを作成することです。その後、必要な場所にインポートできます。


エリックが指摘した記事を覚えていますか?私はこの質問/回答でエリックを見つけることができないようです
ダニエル・ルッチ

7
@DanR、はい、これは記事です。56件の賛成票があるにもかかわらず、何らかの理由でモデレーターが彼の回答を削除しました。
ドリューノークス2014

1
@DrewNoakes:リンクのみの回答であるため削除されたと思います。彼が記事の主要なポイントを要約したとしたら。
smci 2018

1
残念ながらこの記事は現在デッドリンクです:-(。最新のアーカイブされたバージョンはここにあります:web.archive.org/web/20190714164001/http
//…

7

コードとテストを整理する方法は、あらゆるOO言語の場合とまったく同じです。

私のやり方からの回答。それは正しくないかもしれませんが、私にとってはうまくいきます

  1. 機能の分割方法によって異なります。私のメインのpythonアプリには、エントリポイントのクラスを含む1つのファイルと、さまざまな機能のパッケージがあります
  2. 私はEclipseにPyDevを使用し、Javaの場合と同じように整理します。
>  Workspace
>     |
>     |-Src
>     |   |-Package1
>     |   |-Package2
>     |   |-main.py
>     |-Test
>         |-TestPackage1
>         |-TestPackage2
  1. どこでもDocStringを使用してすべてを追跡する
  2. 関連__init__.pyファイルがフォルダにあることを確認した後。その単純なケースfrom module import class

5
ただし、1つの注意点があります。javaは、パッケージ、ファイル、およびクラスと一種の独裁的な関係にあります。時々、私が望むよりもはるかに多くのソースファイルができてしまうことがあります。一部の組織の規則-たとえば-(ネストされた)内部クラスまたはファイルの下位にある "ヘルパー"クラスを避ける-コンパイラの要件を超えて、これをさらに悪化させます。整然と保管してください。階層は便利ですが、作成作業は避けてください。
Roboprog、2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.