Pythonでの「プライベート変数」

Pythonは他の言語のように厳密なアクセス制御を持たないため、クラス内で「プライベート」変数を宣言する明確な構文はありません。しかし、Pythonの慣例により、アクセスを制限するための手法がいくつかあります。

シングルアンダースコア _

シングルアンダースコアで始まる変数(例: _var)は、「プライベート」と見なすべきだという慣習です。これは単なる慣例であり、他の場所からのアクセスは技術的には可能ですが、開発者に対して「内部専用」であることを示しています。

class MyClass:
    def __init__(self):
        self._private_var = "This is private"
obj = MyClass()
print(obj._private_var)  # アクセスは可能だが、非推奨

ダブルアンダースコア __

ダブルアンダースコアで始まる変数(例: __var)は、名前マングリングが適用されます。これは、クラス名を前置して変数名を変更する機能であり、クラス外からの直接アクセスを難しくします。ただし、完全に隠蔽されるわけではなく、名前マングリングされた形でアクセスすることは可能です。

class MyClass:
    def __init__(self):
        self.__private_var = "This is really private"
obj = MyClass()
# print(obj.__private_var)  # AttributeError
print(obj._MyClass__private_var)  # 名前マングリングを使ってアクセス可能

まとめ

Pythonには明確なプライベート変数は存在しませんが、シングルアンダースコアやダブルアンダースコアを使用して、開発者間での「プライバシー」を保つ手法が採用されています。名前マングリングを活用することで、意図的にアクセスを制限できますが、完全なプライバシーは保証されません。