6

私は、30 人までの開発者のチームのために一連の Python コーディング ガイドラインを作成しています。私のドキュメントの基礎として、これまでGoogle python スタイル ガイドPEP 8 スタイル ガイドを研究し、両方の情報を取り入れてきました。

Google スタイル ガイドが PEP 8 よりも制限が厳しい場所の 1 つは、インポートに関するものです。Google ガイドでは、開発者のみがパッケージとモジュールのみをインポートし、その中の項目をより修飾された名前で参照するように要求しています。例えば:

from pkg import module
...
my_class = module.MyClass()

正当化は、「各識別子のソースが一貫した方法で示されている」ことです。私たちのプロジェクトでは、2 ~ 3 レベルの深さのパッケージで編成するつもりです。そのため、識別子の完全なソースを知るために、読者はとにかく import ステートメントを調べる必要があります。このスタイルのインポートを「推奨されるスタイル」として提唱したいと思います。

from pkg.module import MyClass
...
my_class = MyClass()

私見、リスト内包表記などの python 構造の可読性は、名前がより簡潔になると改善されます。

私がはっきりしていないのは、Python インタープリターが舞台裏で何をしているのかということです。たとえば、MyClass は現在、このモジュールとこのモジュールのすべてのインポーターの両方のグローバル名前空間の一部ですか? (これは悪いことであり、いくつかの奇妙なバグにつながる可能性があります。これが本当なら、私は Google スタイルを提唱します)。

私の Python 開発経験は約 6 か月に限られています (また、私たちのプロジェクトについて相談できる専門家は多くありません) ので、コミュニティからより多くの情報を得たいと思いました。ここに私がすでに研究したいくつかの項目があります:

effbot - インポートに関する議論

スタック オーバーフロー - インポートとインポートからのインポート

python ドキュメント - モジュール

Python ドキュメント - インポート

ご回答ありがとうございます。

4

2 に答える 2

5

Python では、複数のモジュールにわたってグローバルである変数などはありません。を行う場合はfrom pkg.module import MyClass、それMyClassを行うモジュールのグローバル名前空間にありますが、他のモジュール (MyClass をインポートするモジュールをインポートするモジュールを含む) のグローバル名前空間にはありません。

より一般的な質問については、状況に応じて、どちらのインポート メカニズムも受け入れられます。モジュール名が長い場合は、別の名前でインポートすることで短縮できます。

# Awkward
from package import reallylongmodule
reallylongmodule.MyClass()

# Less awkward
from package import reallylongmodule as rlm
rlm.MyClass()

クラス名がどこから来て、それが何であるかを識別できるほど十分に特徴的である場合、クラスだけをインポートしても問題ありません。ただし、比較的わかりやすい名前 (「Processor」、「Unit」、「Data」、「Manager」など) でクラスを定義する複数のモジュールがある場合は、モジュール名を使用してそれらにアクセスし、明確にすることをお勧めします。あなたがしていること。

スタイル ガイドは最終的にはガイドであり、法律ではありません。私自身の好みは、明快さと読みやすさを最大化するメカニズムを選択することです。これには、長くて扱いにくい名前を避けることと、短くてあいまいな名前、または不可解な名前を避けることのトレードオフが伴います。そのトレードオフをどのように行うかは、使用している特定のライブラリとその使用方法 (インポートするモジュールの数、それらからインポートするものなど) によって異なります。

于 2013-04-10T22:22:09.653 に答える