変数の利用・修正方法は?
Pythonの変数とアンダースコアについて
Pythonには、シングルアンダースコア(_
)またはダブルアンダースコア(__
)を使用した重要な命名規則があります。これらの規則に従うことで、API内での公開と非公開の名前を区別し、サブクラス化のための安全なクラスを作成し、名前の競合を避けることができます。
これらの規約を守ることで、他のPython開発者にとってPythonicで一貫性のあるコードを書くことができます。特に、他の開発者が作業するためのコードを書く場合に、このスキルは非常に役立ちます。
このチュートリアルでは、以下の内容を学びます:
- アンダースコア(
_
)を使用したPythonの命名規則について学ぶ - シングルアンダースコアを用いて公開と非公開の名前を区別する方法を学ぶ
- Pythonクラスにおける名前マングリングにダブルアンダースコアを使用する方法を学ぶ
- Pythonの名前におけるアンダースコアの一般的な使用例を探求する
Pythonにおける公開インターフェースと命名規則
Pythonプログラマとしては、よく公開インターフェースを使用することになります。公開インターフェースは、プログラムの他の部分または他のプログラムにサービスを提供するタイプのプログラミングインターフェースであり、アプリケーションプログラミングインターフェース(API)とも呼ばれます。
しかし、これらのパッケージやモジュールの多くは、直接アクセスするためには意図されていないオブジェクトを定義しています。これらのオブジェクトは、特定のパッケージやモジュールの内部でのみ使用されるため、公開インターフェースの一部ではありません。
オブジェクト指向プログラミングのコンテキストでは、非公開オブジェクトを作成するために、シングルアンダースコアを使用することができます。
上記のコードでは、クラスMyClass
内の_private_var
と_private_method
は、非公開の変数と非公開のメソッドとして定義されています。このように、アンダースコアを使用することで、特定のオブジェクトが公開インターフェースの一部でないことが明確になります。
このコードでは、外部から_private_var
にアクセスすることはできますが、非公開の変数であることを示すためにアンダースコアを使用しています。同様に、外部からは_private_method
にアクセスできません。
ダブルアンダースコアによるクラスの名前マングリング
Pythonでは、クラスの属性とメソッドにダブルアンダースコア(__
)を使用すると、名前マングリングと呼ばれる特殊な処理が行われます。名前マングリングにより、クラスの非公開メンバに外部から正しくアクセスすることができなくなります。
名前マングリングの例を見てみましょう:
上記のコードでは、クラスMyClass
内の__private_var
と__private_method
は、名前マングリングが適用されます。これにより、属性とメソッドが外部からアクセスできなくなります。
名前マングリングで変換される名前は、_クラス名__変数名
や_クラス名__メソッド名
のような形式になります。したがって、__private_var
は_MyClass__private_var
に変換され、同様に__private_method
は_MyClass__private_method
に変換されます。
これにより、外部のコードから非公開の変数やメソッドにアクセスすることは困難になります。ただし、名前マングリングを回避する方法もあります。