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