在這個例子中,我們假設熱狗總包括一個小麵包。(否則可真是一團糟。)下面為熱狗指定一些屬性和方法。
下面是熱狗的屬性。
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 中的另一個約定是類名總是以大寫字母開頭。目前為止,我們已經見到
Ball
和HotDog
,所以說我們一直都在遵循這個約定。
現在,運行代碼清單 14-5 中的代碼,看看會得到什麼。結果應該像這樣:
可以看到,屬性分別是 cooked_level = 0
,cooked_string = "Raw"
,另外 condiments
為空。
現在來測試 cook
方法。把下面的代碼行增加到代碼清單 14-5 中:
再運行這個程序,現在輸出會變成:
看來我們的 cook
方法能正常工作。cooked_level
從 0
變成 4
,而且字符串也得到更新(從 Raw
變成 Medium
)。
下面來增加一些配料。這需要一個新的方法。另外還可以自己增加 __str__
函數,讓打印對像更為容易。按代碼清單 14-6 編輯程序。
代碼清單 14-6 包含
cook
、add_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.
程序的第一部分創建了類。第二部分測試了烤這個虛擬熱狗和添加配料的方法。不過從最後幾行代碼來看,我認為烤得太過了。這太浪費番茄醬和芥末醬了!