28

cherryPyたとえば、次のようなファイルがあります。

  • __init__.py
  • _cptools.py

それらはどう違いますか?これは何を意味するのでしょうか?

4

4 に答える 4

38

__...__予約済みの Python(ファイル名と他の名前の両方) を意味します。二重アンダースコア表記を使用して独自の名前を発明するべきではありません。既存のものを使用する場合、それらには特別な機能があります。

この特定の例で__init__.pyは、パッケージの「メイン」ユニットを定義します。また、Python は特定のディレクトリをパッケージとして扱います。呼び出すときに使用される単位ですimport cherryPy(cherryPyディレクトリです)。これはモジュールのチュートリアルで簡単に説明されています。

もう 1 つの例は__eq__、クラスの等値比較を提供するメソッドです。==これらのメソッドを直接呼び出すことができます (たとえば、演算子を使用するときに暗黙的に使用します)。ただし、新しいバージョンの Python ではそのようなメソッドがさらに定義されている可能性があるため、競合する可能性があるため、独自の名前を作成しないでください__。そのようなメソッドの非常に詳細なリストは、データ モデルのドキュメントにあります。

_...「内部」名としてよく使用されます。たとえば、 で始まるモジュール_は直接使用しないでください。同様に、 のメソッド_はおそらく非公開であるなどです。これは単なる慣習ですが、それを尊重する必要があります。

于 2012-08-30T07:51:35.733 に答える
16

これらおよびその他の命名規則については、Python コードのスタイル ガイド - 説明的: 命名スタイルで詳しく説明されています。

簡単に言うと:

  • __double_leading_and_trailing_underscore__: ユーザー制御の名前空間に存在する「魔法の」オブジェクトまたは属性。例えば__init____import__または__file__。そのような名前を発明しないでください。文書化されたとおりにのみ使用してください。
  • _single_leading_underscore: 弱い「内部使用」指標。たとえばfrom M import *、名前がアンダースコアで始まるオブジェクトはインポートされません。
于 2012-08-30T07:54:01.957 に答える
8

__init__.pyフォルダーに存在する場合、そのフォルダーをモジュールに変える特別なファイルです。モジュールをインポートすると、__init__.py実行されます。もう 1 つは単なる命名規則ですが、そのファイルを直接インポートしてはならないということになると思います。

ここを見てください: 6.4. モジュールの作成方法を説明するパッケージ。

一般的な規則: Python で名前が付い__anything__ているものがある場合、それは特別なものであり、使用する前にそれについて読む必要があります (魔法の関数など)。

于 2012-08-30T07:53:29.737 に答える