web-dev-qa-db-ja.com

Python「プライベート」関数コーディング規約

pythonモジュールとその中の関数を書くとき、私は部外者にさらされることになっているいくつかの「パブリック」関数がありますが、見られると思われる他の「プライベート」関数とローカルおよび内部で使用されます。

私はpythonで絶対的なプライベート関数はありません。しかし、「パブリック」関数と「プライベート」関数を区別するための最良の、最もきちんとした、または最も使用されるスタイルは何ですか?

私が知っているスタイルのいくつかをリストします:

  1. つかいます __all__は、その「パブリック」関数を示すモジュールファイル内にあります( python __all__モジュールレベル変数は何ですか?
  2. 「プライベート」関数の名前の先頭にアンダースコアを使用します

人々が使用する他のアイデアや慣習はありますか?

どうもありがとうございました!

57
Kaifei

Pythonの Class モジュールドキュメントから:

Pythonには、オブジェクト内部からしかアクセスできないプライベートのインスタンス変数は存在しません。ただし、ほとんどのPythonコード:アンダースコアで始まる名前(_spamなど)は、APIの非公開部分として扱われる必要があります。関数、メソッド、またはデータメンバー)実装の詳細と見なされ、予告なく変更される場合があります。

クラスプライベートメンバには有効なユースケースがあるため(つまり、サブクラスで定義された名前と名前の衝突を避けるため)、名前マングリングと呼ばれるこのようなメカニズムのサポートは制限されています。 __spam(少なくとも2つの先行アンダースコア、最大1つの後続アンダースコア)の形式の識別子は、_classname__spamにテキストで置き換えられます。classnameは、先頭のアンダースコアを削除した現在のクラス名です。このマングリングは、クラスの定義内で発生する限り、識別子の構文上の位置に関係なく行われます。

87
Eric Hydrick