專項練習 · 8 分鐘閱讀

Python 類練習:建構一個小型物件模型

從一個小的記錄開始,類會更容易理解。先讓物件儲存幾個欄位,加一個方法,測試通過後再增加行為。

從藍圖開始

類把資料和行為組合在一起。建立物件時會執行 __init__,給屬性賦初始值。第一版要小:兩個欄位就足夠看清模式。

class Order:
    def __init__(self, drink, price):
        self.drink = drink
        self.price = price

order = Order("latte", 4.5)
print(order.drink, order.price)

兩個欄位的類

添加方法

方法就是類裡的函式,第一個參數是 self,指向目前物件。在實例上呼叫方法;不需要手動傳入 self。

class Order:
    def __init__(self, drink, price, quantity=1):
        self.drink = drink
        self.price = price
        self.quantity = quantity

    def total(self):
        return self.price * self.quantity

print(Order("latte", 4.5, 2).total())

計算總價

保持實例獨立

每個物件都有自己的屬性。建立第二個 Order 不會覆蓋第一個。需要處理多條記錄時,把物件放進列表,用同一個迴圈處理。

class Order:
    def __init__(self, drink, price):
        self.drink = drink
        self.price = price

orders = [Order("latte", 4.5), Order("tea", 3.0)]
for order in orders:
    print(order.drink, order.price)

多個獨立物件

把重複計算放進方法

如果每個呼叫者都要重複同一個公式,就把它放進方法。方法名說明了意圖,計算也只有一個地方需要修改。

class Order:
    def __init__(self, price, quantity):
        self.price = price
        self.quantity = quantity

    def total(self):
        return self.price * self.quantity

print(Order(4.5, 3).total())

公式只寫一次

知道什麼時候字典就夠了

類不是必須的。只是傳遞固定記錄時,字典可能更簡單。當狀態和行為確實屬於一起,或同樣的操作反覆出現時,再引入類。

order = {"drink": "latte", "price": 4.5}
print(order["drink"])
print(order["price"] * 2)

字典替代方案

你的練習清單

常見問題

self 是什麼?

self 是呼叫方法時使用的實例。Python 會自動傳入它,所以呼叫者不需要提供。

每個程式都需要類嗎?

不需要。簡單記錄用字典,計算用函式。資料和行為確實屬於一起時,類才有價值。

為什麼會提示缺少參數?

方法定義時漏了 self,或呼叫時缺少必需參數,都可能造成這個錯誤。檢查方法籤名和呼叫。

練習類

12 道題,覆蓋 __init__、self、屬性、方法和獨立實例。

打開練習

繼續閱讀: