たとえば、cherryPy
には、次のようなファイルがあります。
__init__.py
_cptools.py
それらはどう違いますか?これは何を意味するのでしょうか?
__...__
は予約済みを意味しますPythonname(ファイル名と他の名前の両方)。すべきではありません。 invent二重下線表記を使用して独自の名前を作成します。既存の名前を使用する場合は、特別な機能があります。
この特定の例では、__init__.py
はパッケージの「メイン」ユニットを定義します。また、Pythonは、特定のディレクトリをパッケージとして扱います。これは、import cherryPy
を呼び出すときに使用される単位です(cherryPy
はディレクトリです)。 。これは モジュールチュートリアル で簡単に説明されています。
もう1つの例は、クラスの等価比較を提供する__eq__
メソッドです。これらのメソッドを直接呼び出すことができます(たとえば、==
演算子を使用する場合は暗黙的に使用します)。ただし、新しいPythonバージョンでは、このようなメソッドがさらに定義される可能性があるため、衝突する可能性があるため、独自の__
-名前を作成しないでください。そのような名前の詳細なリストを見つけることができます。 データモデル ドキュメントのメソッド。
_...
は「内部」名としてよく使用されます。たとえば、_
で始まるモジュールは直接使用しないでください。同様に、_
を使用するメソッドは、おそらくプライベートなどです。これは単なる慣例ですが、尊重する必要があります。
これらおよびその他の命名規則については、 スタイルガイドfor Python Code-Descriptive:Naming Styles
簡単に:
__double_leading_and_trailing_underscore__
:ユーザーが制御する名前空間に存在する「魔法の」オブジェクトまたは属性。例えば。__init__
、__import__
または__file__
。そのような名前を発明しないでください。文書化されているとおりにのみ使用してください。_single_leading_underscore
:弱い「内部使用」インジケーター。例えば。 from M import *
は、名前がアンダースコアで始まるオブジェクトをインポートしません。__init__.py
は、フォルダ内に存在する場合、そのフォルダをモジュールに変える特別なファイルです。モジュールをインポートすると、__init__.py
実行されます。もう1つは単なる命名規則ですが、これはそのファイルを直接インポートするべきではないと言うでしょう。
モジュールの作成方法の説明については、ここを見てください: 6.4。パッケージ 。
一般的なルール:Pythonはnamend__anything__
それは特別なことであり、使用する前にそれについて読む必要があります(例:魔法の関数)。
現在選択されている回答は、__init__.py
の二重下線表記についてすでに適切な説明を提供しています。
そして、_cptools.py
表記ファイル名内は実際には必要ないと思います。おそらく、 スタイルガイドfor Python Code-Descriptive:Naming Styles :
_single_leading_underscore
:弱い「内部使用」インジケーター。例えば。from M import *
は、名前がアンダースコアで始まるオブジェクトをインポートしません。
どちらかといえば、前述のスタイルガイドは実際にはファイル名に_single_leading_underscore.py
を使用してに対してです。その パッケージとモジュール名のセクション は、モジュールがC/C++で実装されている場合のそのような使用法についてのみ言及しています。
一般に、その_single_leading_underscore
表記は、他の通常のメソッドと区別するために、通常、関数名、メソッド名、およびメンバー変数で使用されます。
開発者はスクレーパーではないため、ファイル名に_single_leading_underscore.py
を使用する必要はほとんどありません(あるとしても)。開発者はファイル名に基づいてファイルを回収する可能性は低いです。それらはパッケージの最高レベルのAPI(技術的に言えば、__all__
で定義された公開エンティティ)に従うだけなので、すべてのファイル名は、ファイル(つまりモジュール)かどうかの要因になることは言うまでもなく、目立たないことさえあります。使用されます。