web-dev-qa-db-ja.com

Pythonでプライベートメソッドを使用する場合

私はクラスを持っていますが、その中のすべてのメソッドはプライベートでなければなりません(フォーム__init__および__str__)。すべてのメソッドを二重下線で示す必要がありますか、それとも悪い習慣と見なされますか?

8
Lewis

真のプライベートメソッド(クラスの外部からは表示または使用できないメソッド)は、Pythonには存在しません。私たちが持っているものは、触れてはいけないものに触れないようにするための単なる提案にすぎない慣習です。

プライバシーに最も近いのは名前のマングリングです。 __some_attrという名前のMyClassの属性は、内部で_MyClass__some_attrに名前が変更されるだけなので、クラスの外部から参照するのは少し面倒です。これはめったに使用されません。ほとんどの人は、単一のアンダースコア(_attr)をプレフィックスとして付けるだけです。これは、何かに依存してはならず、パブリックインターフェイスの一部ではないという表記です。

識別子の前後に二重のアンダースコアを使用することは禁止されていませんが、内部言語の詳細(「マジック」メソッドなど)のために予約されていると見なされます。新しい__attr__sを思いつくことは避けてください(インタープリターをハッキングしているのでない限り)。

15