私はprivate
モジュールまたはpackage
モジュールの洗練されたツリーを持つ大規模なライブラリパッケージを持っています - それをfunnylib
としましょう。エンドユーザーが直接内部モジュール(のようなfunnylib.foo
、funnylib.bar
など)をタッチすることは望ましいことではないですので、私が代わりに外部インタフェースを提供したい - このように:d2:デフォルトのパッケージモジュール(__init__.pyのようですが、Dの場合)
funnylib.d:
public import funnylib.foo;
public import funnylib.bar;
public import funnylib.baz;
だけであることをエンドユーザがimport funnylib
のようにインポートしました。問題は、Dがfunnylib.d
とfunnylib/
を同時に持つことを禁止していることです。
Pythonで__init__.py
のように、「default package module」のようなものがありますか?いいえ、上記の設計を行う正しい方法は何ですか?
アップデート1:私はfunnylibはもはやアクセスpackage
シンボルを保護しますと、そのfunnylib
は罰金インポートされますが、これは保護低下(強く望ましくない)のコストを持つことになり、funnylib_private
のようにパッケージ化するiternalモジュールを移動について考え、そして不快なファイルレイアウトにつながります。
私はモジュールエンドユーザのインポートがパッケージであるという事実を隠そうとはしません。実際には、それはきれいでクリアなものにしておきたい - import funnylib.here_is_module_which_imports_all_other_stuff;ではなく、 'import funnylib;ですから、DIP16が受け入れられるように、一時的な回避策として 'funnylib.all'を使用します。これは広く使われるようになります。 – toriningen