8

Pythonモジュールに共通のパターンが見られます。__init__.pyサブモジュールをインポートする場合があります。

例えば

mymod/
    __init__.py:
        from . import subm1, subm2
        __all__ = ['subm1', 'subm2']

    subm1.py:
        def subf1():
            ...
        __all__ = ['subf1']

    subm2.py:
        def subf2():
            ...
        __all__ = ['subf2']

したがって、クライアントコードはこれを行うだけで済みます。

import mymod
mymod.subm1.subf1()
mymod.subm2.subf2()

それ以外の:

import mymod.subm1
import mymod.subm2
mymod.subm1.subf1()
mymod.subm2.subf2()

ベストプラクティスTMはどれですか?再帰的なインポートに何か問題がありますか、それともデフォルトの動作に固執する必要がありますか?デフォルトの動作の理論的根拠は何ですか?

4

2 に答える 2

3

これは、モジュールの使用法によって異なります。サブモジュールが、たまたますべて静的メソッドを持つ Java のようなクラスではなく、たまたまモジュールとして記述されたシングルトン オブジェクトである場合、再帰インポートはおそらく問題ありません。一方、モジュールがいくつかの関連するサブモジュールをグループ化している場合 (たとえば、stdlibhtmlモジュールを参照)、明示的なサブモジュールのインポートが必要になります。

一般に、再帰的なインポート設定では、「このモジュールのクライアントは常にこれらすべてを必要とする」と言います。それがあなたのモジュール(および他のモジュール、ケースバイケース)に当てはまるかどうかを検討し、そこから進んでください。

于 2012-05-18T04:58:07.590 に答える
0

それらの慣行は同じです。

最初の例では、両方のサブモジュールを一緒に使用する必要があるため、ユーザーコードには常に2つのインポートがあります。それらはショートカットを提供します。

2つ目は、サブモジュールが他のモジュールとの間接的な相互作用のみを持つスタンドアロンブロックであることを期待しています。

于 2012-05-18T05:11:24.443 に答える