可變資料易造成問題:當它與許多程式碼有偶合關係,修改某處就會對另處產生連鎖反應。
我們應盡量減少可變資料的作用域。

Replace Derived Variable with Query

替換衍生變數為查詢函式是種對應作法。
如果來源資料會變或衍生資料的生命週期長,使用物件包含計算式與衍生資料是個好作法;
如果來源資料不會再變或衍生資料生命週期短,那用物件或用函式直接轉出新資料都可被接受。

# Before
class Inventory:
    def __init__(self):
        self.items = []
        self.item_count = 0

    def add_item(self, item):
        self.items.append(item)
        self.item_count += 1

    def print_inventory(self):
        print(f"Total items: {self.item_count}")
        for item in self.items:
            print(f"Item: {item}")

# After
class Inventory:
    def __init__(self):
        self.items = []

    def add_item(self, item):
        self.items.append(item)

    def get_item_count(self):
        return len(self.items)

    def print_inventory(self):
        print(f"Total items: {self.get_item_count()}")
        for item in self.items:
            print(f"Item: {item}")