【Python入門】クラス内のメソッド名にアンダースコアを使う意味
目的
Pythonでクラス内にメソッドを定義するときに、アンダースコアを使う意味を理解すること
対象読者
- Python初学者
-
_を使用する意味を理解したい方
プライベートメソッド
_method_name(self):
※このメソッド名の先頭には _ が1つ記述されています。
Javaなどの言語では、private のようなアクセス修飾子を使用し、カプセル化を行ない、そのクラス内またはサブクラス内でのみ使用可能と、アクセス制御することができます。
しかし、Pythonには厳密なアクセス制御の仕組みが存在しません。メソッドや属性は、技術的にはすべて外部からアクセス可能です。
そのため、Pythonでは命名規則を使って、開発者間で「これは外部から触らないでね」という約束事(慣習)を共有しています。
_(アンダースコア)1つ: 非公開の「お願い」
メソッド名の先頭にアンダースコアを1つ付けることは、Pythonの標準スタイルガイドであるPEP 8によって推奨されている慣習です。
意味
このメソッドは、そのクラスの内部ロジックでのみ使用されることを意図しています。
意図
このクラスや、このクラスを継承したクラスの内部ロジックでのみ使用されるべきであり、外部のクラスから直接呼び出されるべきではないことを示します。
比較
_method_name
外部から直接呼び出さないでください
クラスの内部実装(後で変更される可能性がある部分)であることを示し、外部APIとしての利用を非推奨とします。
このメソッドがクラスの内部実装の詳細であり、外部ユーザーは気にしなくて良い部分であることを明確に示すことができます。
クラスの内部実装の詳細であり、外部ユーザーは中身を気にせず、このメソッドが将来的に予告なく変更・削除される可能性があることを示します。
method_name
これは公開APIです
クラスの公開インターフェースであることを示し、外部からの利用を想定しています。
つまり、そのクラスの公開APIの一部であると宣言していることになります。
利用者は、このメソッドが安定して提供され続けることを期待します。
つまり、アンダースコアの有無によって、伝えたい意図が異なるということです。
まとめ
-
_を通じて、開発者に意図を明確に表現している -
_は、慣習的に「外部から参照しないでほしい」という意思表示を表す -
_がない場合は、公開されているという意図を表すと認識される
参考URL
Discussion