讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 14.6 一個示例類 HotDog >

14.6 一個示例類 HotDog

在這個例子中,我們假設熱狗總包括一個小麵包。(否則可真是一團糟。)下面為熱狗指定一些屬性和方法。

下面是熱狗的屬性。

  • cooked_level:這是一個數字,通過這個屬性我們可以知道熱狗烤了多長時間。0 ~ 3 表示還是生的,超過 3 表示半生不熟,超過 5 表示已經烤好,超過 8 表示已經烤成木炭了!我們的熱狗開始時是生的。

  • cooked_string:這是一個字符串,描述熱狗的生熟程度。

  • condiments:這是熱狗上的配料列表,比如番茄醬、芥末醬等。

下面是熱狗的方法。

  • cook:把熱狗烤一段時間。這會讓熱狗越來越熟。

  • add_condiment:給熱狗加一些配料。

  • __init__:創建實例並設置默認屬性。

  • __str__:讓 print 的結果看起來更好一些。

首先,需要定義類。先定義 __init__ 方法,它會為熱狗設置默認屬性:

class HotDog:    def __init__(self):self.cooked_level = 0self.cooked_string = "Raw"self.condiments =   

先從一個沒有加任何配料的生熱狗開始。

現在,來建立一個方法烤熱狗:

繼續下面的工作之前,先對這一部分做個測試。首先,需要創建熱狗的一個實例,還要檢查它的屬性。

myDog = HotDogprint myDog.cooked_levelprint myDog.cooked_stringprint myDog.condiments  

下面把這些內容都放在一個程序中,運行這個程序。代碼清單 14-5 顯示了(到目前為止)完整的程序。

代碼清單 14-5 熱狗程序的開始部分

class HotDog:    def __init__(self):self.cooked_level = 0self.cooked_string = "Raw"self.condiments =     def cook(self, time):self.cooked_level = self.cooked_level + timeif self.cooked_level > 8:    self.cooked_string = "Charcoal"elif self.cooked_level > 5:    self.cooked_string = "Well-done"elif self.cooked_level > 3:    self.cooked_string = "Medium"else:    self.cooked_string = "Raw"myDog = HotDogprint myDog.cooked_levelprint myDog.cooked_stringprint myDog.condiments  

像(Python)程序員一樣思考

Python 中的另一個約定是類名總是以大寫字母開頭。目前為止,我們已經見到 BallHotDog,所以說我們一直都在遵循這個約定。

現在,運行代碼清單 14-5 中的代碼,看看會得到什麼。結果應該像這樣:

可以看到,屬性分別是 cooked_level = 0cooked_string = "Raw",另外 condiments 為空。

現在來測試 cook 方法。把下面的代碼行增加到代碼清單 14-5 中:

再運行這個程序,現在輸出會變成:

看來我們的 cook 方法能正常工作。cooked_level0 變成 4,而且字符串也得到更新(從 Raw 變成 Medium)。

下面來增加一些配料。這需要一個新的方法。另外還可以自己增加 __str__函數,讓打印對像更為容易。按代碼清單 14-6 編輯程序。

代碼清單 14-6 包含 cookadd_condiments__str__HotDog

這個代碼清單有點兒長,但我還是建議你自己鍵入這些代碼,而且你已經有了之前代碼清單 14-5 中的部分代碼,不過,如果你的手指確實很累,或者你沒有時間,也可以在 \examples 文件夾或本書網站上找到這個代碼。

運行這個程序,看看能得到什麼。結果應該如下:

>>> ================================ RESTART ================================>>>Raw hot dog.Cooking hot dog for 4 minutes...Medium hot dog.Cooking hot dog for 3 more minutes...Well-done hot dog.What happens if I cook it for 10 more minutes?Charcoal hot dog.Now, I'm going to add some stuff on my hot dogCharcoal hot dog with ketchup, mustard.  

程序的第一部分創建了類。第二部分測試了烤這個虛擬熱狗和添加配料的方法。不過從最後幾行代碼來看,我認為烤得太過了。這太浪費番茄醬和芥末醬了!