重構資料比重構函式更困難——你無法僅透過方法提取來簡化它。
封裝變數(Encapsulate Variable)能將「重組資料」轉化為更簡單的「重組函式」。

Encapsulate Variable

封裝也提供一個單一觀測點,讓你控制資料如何被存取和修改,
這也是物件導向程式設計(OOP)鼓勵保持物件資料私有的原因。

不可變資料(Immutable Data)不需封裝——它無法被修改,所以沒有程式碼會讀到過時值。
不可變性是種強大保障。

何時該封裝變數?

  • 存取控制:你需要驗證或限制對資料的讀寫
  • 集中管理:將取得或更新值的地方集中起來,便於維護
  • 不變式強制:觸發副作用或強制規則(如快取、通知)

對於真正不可變的資料,可以跳過封裝。

範例#

重構前#

config_value = 50

if __name__ == "__main__":
    print(config_value)

重構後#

class Configuration:
    def __init__(self):
        self._config_value = 50

    @property
    def config_value(self):
        return self._config_value

    @config_value.setter
    def config_value(self, value):
        self._config_value = value


if __name__ == "__main__":
    config = Configuration()
    print(config.config_value)
    config.config_value = 100
    print(config.config_value)