インスタンス変数の値をクラス外部から読み取りや更新できないように設定する方法

Pythonにおいて、クラス内のインスタンス変数をクラス外部から読み取り専用または書き込み禁止にするために、特定のアクセス制御修飾子は存在しません(C++やJavaのような静的型付け言語にある privateprotected のような修飾子はありません)。

しかし、Pythonでは一般的に以下の方法でアクセス制御を模倣します:

  1. 名前修飾: インスタンス変数の名前を修飾することで、外部からアクセスしにくくすることができます。通常、Pythonプログラマは、インスタンス変数の名前の前にアンダースコアを付けて “非公開" であることを示します。ただし、これは単なる慣例であり、実際にはアクセス制御を強制しないことに注意してください。

    python
    class MyClass: def __init__(self): self._my_variable = 42 obj = MyClass() print(obj._my_variable) # 通常は "_my_variable" を外部から読み取り可能
  2. プロパティを使用: @property デコレータと @variable_name.setter デコレータを使用して、ゲッターとセッターを提供し、インスタンス変数の読み取り専用や書き込み禁止を模倣できます。

    python
    class MyClass: def __init__(self): self._my_variable = 42 @property def my_variable(self): return self._my_variable obj = MyClass() print(obj.my_variable) # プロパティ経由で読み取り obj.my_variable = 10 # これはエラーとなります(読み取り専用)

    この方法は外部からインスタンス変数を読み取り専用にするための一つの方法ですが、厳密なアクセス制御を提供しないことに注意してください。Pythonの哲学に従い、プログラマは"信頼できる"と仮定され、名前修飾やプロパティを使用してアクセス制御をサポートすることが多いです。