讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 14.7 隱藏數據 >

14.7 隱藏數據

你可能已經意識到,查看或修改對像中的數據(屬性)有兩種方法。可以直接訪問,像這樣:

myDog.cooked_level = 5  

或者也可以使用修改屬性的方法,例如:

myDog.cook(5)  

如果熱狗開始時是生的(cooked_level = 0),這兩種做法的作用相同。它們都會把 cooked_level 設置為 5。那麼為什麼還要那麼麻煩,專門建立一個方法來做這個工作呢?為什麼不直接修改呢?

我可以想到至少兩個原因。

  • 如果直接訪問屬性,烤熱狗至少需要兩部分:改變 cooked_level 和改變 cooked_string。而利用一個方法,可以只做一個方法調用,它就會完成我們需要的一切工作。

  • 如果直接訪問屬性,就會有這樣的結果:

    cooked_level = cooked_level - 2

這會使熱狗比以前還生。不過熱狗肯定不會越烤越生!所以這是毫無意義的。通過使用方法,可以確保 cooked_level 只會增加而不會減少。

術語箱

按編程術語來講,如果限制對對像數據的訪問,使得只能通過使用方法來獲取和修改這些數據,就稱為數據隱藏(data hiding)。Python 沒有提供任何途徑來保證數據隱藏,不過如果你願意,可以適當地編寫代碼來遵循這個規則。

目前為止,我們已經看到對像包含屬性和方法。而且瞭解了如何創建對像以及如何利用一個名為 __init__ 的特殊方法初始化對象。我們還看到了另一個特殊方法 __str__,利用這個方法可以更好地打印我們的對象。