2013-02-23 26 views
41

Pythonモジュールと関数を書くときに、私は外部に公開されるはずの "public"関数をいくつか持っていますが、ローカルおよび内部で使用されます。Pythonの "private"関数コーディング規約

私はPythonでは絶対プライベート関数がないことを理解しています。しかし、「パブリック」機能と「プライベート」機能を区別するために、最高、最もきちんとした、または最もよく使用されるスタイルは何ですか?

私が知っているスタイルのいくつかのリスト:その「公共」の機能を示すために、モジュールファイル内

  1. 使用__all__What's the python __all__ module level variable for?
  2. 使用は「プライベート」の機能の名前の先頭に下線を

人々が使用する他のアイデアやコンベンションはありますか?

ありがとうございました! PythonのClassモジュールのドキュメントから

答えて

67

:オブジェクトの内部以外からアクセスすることはできません

プライベート」インスタンス変数は、Pythonには存在しません。しかし、大部分のPythonコードの後に​​は、アンダースコア(_spamなど)を前に付けた名前は、APIの非公開部分として扱われるべきです(関数、メソッド、データメンバーのいずれであっても) 。実装の詳細とみなし、予告なく変更することがあります。

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

+1

ありがとうございました!だから、一般的に人々はモジュールの "public"と "private"関数を区別するために先頭のアンダースコアを使うだけでしょうか? – Kaifei

+9

ほとんど。ドキュメントのように、それは大会です、あなたはまだ彼らが公開しているような機能にアクセスすることができますが、物事を行うための "正しい"方法は、本当にそこにいないふりをすることです。 –

+0

この規約は、クラスベースではない関数に適用されますか? – radtek

関連する問題