5

私の会社のためにいくつかの中小規模のライブラリを作成する必要があるとしましょう。

Pythonic の方法で、Java アプローチを使用し、次の構造を実現するなど、共通の高レベル パッケージ (エヘム、モジュール) をすべてのプレフィックスとして使用することは理にかなっていますか?

mycompany.mylibrary1.moduleA
mycompany.mylibrary1.moduleB.moduleD
mycompany.mylibrary2.moduleC

または単に行く方が良いですか:

mylibrary1.moduleA
mylibrary1.moduleB.moduleD
mylibrary2.moduleC

ほとんどの場合、2番目のアプローチが使用されていることがわかりますが、それが正しい方法であるという確認(またはそうでない)を探していました。

PEP 008では、この点で何も見つかりませんでした。

Python のライブラリの命名規則はややこしいので、これを完全に一貫させることはできません [...]

次に、モジュールとクラスの命名の指示だけでなく、相対インポートが推奨されないという事実のみを取得します。

絶対インポートが進むべき道であるという事実は、ライブラリをどのように編成するかを決定することを非常に重要なものにします (相対インポートを避けることが良いか悪いかを議論するためにここにいるわけではありません)。

私はあなたのすべてのライブラリを名前空間化する Java アプローチが好きですが、それは pythonic ではないという印象があります...どのような方法が推奨されますか?

PS。一般に、「ベスト プラクティス」の質問は SO では主観的であると見なされますが、Python では、PEP の存在により、私の意見では非常に客観的になります。答えは...かもしれませんが、ライブラリを整理するためのベストプラクティスはありません..

4

1 に答える 1

5

Python のインポートと名前には認識上の問題があります。非常に多くの異なる種類の一次オブジェクト (プリミティブ、モジュール、クラス、関数、モジュールのふりをしたクラス、オブジェクトのふりをしたモジュールなど) があるため、人々はドット表記を使用して、エンティティが「到着しました」外部ソースから。したがって

import foo.bar
e = foo.bar.make_entity()

よりも明確に感じられる

from foo.bar import make_entity
e = make_entity()

ただし、これは、アクセスする必要があるものの完全なパスを頻繁に入力する必要があることを意味します。「com.example.some.lib.module.frobnicate() はすぐに面倒になります。したがって、丁寧なライブラリは、そのアクセスに対して合理的に短い名前を提供します。

于 2012-05-04T11:48:31.850 に答える