コンテンツにスキップ

変数の利用・修正方法は?

[

Pythonの変数とアンダースコアについて

Pythonには、シングルアンダースコア(_)またはダブルアンダースコア(__)を使用した重要な命名規則があります。これらの規則に従うことで、API内での公開と非公開の名前を区別し、サブクラス化のための安全なクラスを作成し、名前の競合を避けることができます。

これらの規約を守ることで、他のPython開発者にとってPythonicで一貫性のあるコードを書くことができます。特に、他の開発者が作業するためのコードを書く場合に、このスキルは非常に役立ちます。

このチュートリアルでは、以下の内容を学びます:

  • アンダースコア(_)を使用したPythonの命名規則について学ぶ
  • シングルアンダースコアを用いて公開非公開の名前を区別する方法を学ぶ
  • Pythonクラスにおける名前マングリングにダブルアンダースコアを使用する方法を学ぶ
  • Pythonの名前におけるアンダースコアの一般的な使用例を探求する

Pythonにおける公開インターフェースと命名規則

Pythonプログラマとしては、よく公開インターフェースを使用することになります。公開インターフェースは、プログラムの他の部分または他のプログラムにサービスを提供するタイプのプログラミングインターフェースであり、アプリケーションプログラミングインターフェース(API)とも呼ばれます。

しかし、これらのパッケージやモジュールの多くは、直接アクセスするためには意図されていないオブジェクトを定義しています。これらのオブジェクトは、特定のパッケージやモジュールの内部でのみ使用されるため、公開インターフェースの一部ではありません。

オブジェクト指向プログラミングのコンテキストでは、非公開オブジェクトを作成するために、シングルアンダースコアを使用することができます。

class MyClass:
def __init__(self):
self._private_var = "This is a private variable."
def _private_method(self):
print("This is a private method.")

上記のコードでは、クラスMyClass内の_private_var_private_methodは、非公開の変数と非公開のメソッドとして定義されています。このように、アンダースコアを使用することで、特定のオブジェクトが公開インターフェースの一部でないことが明確になります。

このコードでは、外部から_private_varにアクセスすることはできますが、非公開の変数であることを示すためにアンダースコアを使用しています。同様に、外部からは_private_methodにアクセスできません。

ダブルアンダースコアによるクラスの名前マングリング

Pythonでは、クラスの属性とメソッドにダブルアンダースコア(__)を使用すると、名前マングリングと呼ばれる特殊な処理が行われます。名前マングリングにより、クラスの非公開メンバに外部から正しくアクセスすることができなくなります。

名前マングリングの例を見てみましょう:

class MyClass:
def __init__(self):
self.__private_var = "This is a private variable."
def __private_method(self):
print("This is a private method.")

上記のコードでは、クラスMyClass内の__private_var__private_methodは、名前マングリングが適用されます。これにより、属性とメソッドが外部からアクセスできなくなります。

名前マングリングで変換される名前は、_クラス名__変数名_クラス名__メソッド名のような形式になります。したがって、__private_var_MyClass__private_varに変換され、同様に__private_method_MyClass__private_methodに変換されます。

これにより、外部のコードから非公開の変数やメソッドにアクセスすることは困難になります。ただし、名前マングリングを回避する方法もあります。