3

私のモジュールはすべて 1 つの大きなファイルにまとめられており、保守が難しくなっています。物事を分割する標準的な方法は何ですか?

file に 1 つのモジュールがあり、次のmy_module.pyようにインポートします。

import my_module

「my_module」は間もなく 1,000 行になり、すべてをまっすぐに保つ能力の限界が押し上げられます。ファイルmy_module_base.pymy_module_blah.pyなどを追加my_module.pyすることを考えていました。

from my_module_base import *
from my_module_blah import *
# etc.

その後、ユーザー コードを変更する必要はありません。

import my_module  # still works...

これが定番パターン?

4

3 に答える 3

5

モジュールが実際に何をしているかによって異なります。__init__.py'通常、モジュールを 'ファイルを含むディレクトリにすることをお勧めします。したがって、最初にを のyour_module.pyようなものに変換しますyour_module/__init__.py

その後、ビジネス ロジックに従って続行します。ここにいくつかの例があります:

  • モジュールAPIによって直接使用されないユーティリティ関数はありますか?utils.py

  • データベースを扱う、またはデータベースモデルを表すいくつかのクラスがありますか?models.py

  • またはと呼ばれるいくつかの追加ファイルに入れるのが理にかなっているかもしれないいくつかの内部構成がありますsettings.pyconfig.py

これらは単なる例です (再利用可能なアプリの Django アプローチから少し盗用しました ^^)。前述のように、モジュールの機能に大きく依存します。後でまだ大きすぎる場合は、サブモジュールを作成することも理にかなっています(独自のサブディレクトリとして__init__.py)。

于 2011-04-27T04:42:49.500 に答える
2

これには多くの意見があると思いますが、パッケージに含まれる、より明確に定義された機能単位 (モジュール) に分割すると思います。次に、次を使用します。

from mypackage import modulex

次に、パッケージ名を使用してオブジェクトを参照します。

modulex.MyClass()

(ほとんど)決して使用しないでください

from mypackage import *

これによりバグが発生する可能性があるため (異なるモジュールからの重複した名前は、最終的に 1 つを壊してしまいます)。

于 2011-04-27T04:41:28.703 に答える
1

いいえ、それは標準的なパターンではありません。from something import *意図しない多くのものをインポートするため、通常は良い習慣ではありません。代わりに、あなたが行ったのと同じアプローチに従いますが、モジュールを具体的に含めます。

def myfuncbase.pyで、main.py で 'from base import myfunc main.myfunc` を使用している場合もSo that for your users,機能します。もちろん、循環インポートにならないように注意する必要があります。

また、それfrom something import *が必要な場合は、構成を使用してインポート値を制御します__all__

于 2011-04-27T05:05:02.543 に答える