Pythonがクラスプライベートメンバーにダブルアンダースコアを使用する歴史的な理由は何ですか


8

Pythonでは、モジュールのプライベート関数または変数の名前は_fooです。それがクラスにプライベートである場合、それは名前__fooです。これらの動作の背後にあるメカニズムは異なりますが、それは質問にはほとんど関係がありません。

Python言語の設計中に、クラスのプライベートメンバー用に2つの下線文字が選択されたのはなぜですか?モジュールprivateのように、単一の下線を付けないのはなぜですか?なぜもっと目立つ他のキャラクターがいないのですか?(_と__の区別は難しい)。

ここにはある程度の歴史があると思いますが、見つけるのに苦労しています。なぜなら、なぜそれがそうであるのかではなく、それが何を意味するのかを説明するチュートリアルだからです。


歴史を知るだけで、それが良い選択であったかどうかについての議論には興味がありません。
リンドンホワイト

1
シングルアンダースコアはモジュールプライベートのものではなく、クラスのプライベートメンバーにも使用されます。シングルアンダースコアとダブルアンダースコアの違いは名前のマングリングのみです。これは、多くの場合、クラスで不要または有害です。

「Pythonでは、モジュールのプライベート関数または変数の名前は_foo ...です。」これは誤りです:python.org/dev/peps/pep-0008/#descriptive-naming-stylesを参照してください。一言で言えば、アンダースコアはスクレイピング規則であり、プライベートにすることはありません(メソッドは引き続き外部からアクセスできます)。
1

回答:


16

Python Enhancement Proposal(PEP)8は、他の規則の中でも、シングルおよびダブルアンダースコア名の背後にある意図された意味を説明しています。初期のPEPの多くと同様に、それはGuido van Rossumの好みを表しており、Pythonの認められたBenevolent Dictator for Lifeとして、彼の好みは一般にPythonコミュニティによってフォローされています。

「魔法」の単語を示すために、二重のアンダースコアを使用することは、はるか昔、1970年代に始まるという規約を使用Cプリプロセッサ、(などとして少なくとも行くなど__FILE____LINE__)。これは、プリプロセッサに立ち入り禁止のシンボルがないためであり、めったに使用されない命名パターン(複数の下線と大文字の単語)により、実質的に競合が発生しないことが保証されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.