# 實操案例:烤土豆
為了更好的理解面向對象編程,下面以“烤土豆”為案例,進行分析
:-: 
## 1.分析“烤土豆”的屬性和方法
### 示例屬性如下:
* cookedLevel : 這是數字;0~3表示還是生的,超過3表示半生不熟,超過5表示已經烤好了,超過8表示已經烤成木炭了!我們的土豆開始時時生的
* cookedString : 這是字符串;描述土豆的生熟程度
* condiments : 這是土豆的配料列表,比如番茄醬、芥末醬等
### 示例方法如下:
* `cook()`: 把土豆烤一段時間
* `addCondiments()`: 給土豆添加配料
* `__init__()`: 設置默認的屬性
* `__str__()`: 讓print的結果看起來更好一些
## 2\. 定義類,并且定義`__init__()`方法
~~~
# 定義土豆類
class ?Potato:
"""這是土豆的類"""
#定義初始化方法
def __init__(self):
self.cookedLevel = 0
self.cookedString = "生的"
self.condiments = []
~~~
## 3\. 添加"烤土豆"方法
~~~
#烤地瓜方法
def cook(self, time):
self.cookedLevel += time
if self.cookedLevel > 8:
self.cookedString = "烤成灰了"
elif self.cookedLevel > 5:
self.cookedString = "烤好了"
elif self.cookedLevel > 3:
self.cookedString = "半生不熟"
else:
self.cookedString = "生的"
~~~
## 4\. 基本的功能已經有了一部分,趕緊測試一下
把上面2塊代碼合并為一個程序后,在代碼的下面添加以下代碼進行測試
~~~
myPotato = Potato()
print(myPotato.cookedLevel)
print(myPotato.cookedString)
print(myPotato.condiments)
~~~
完整的代碼為:
~~~
class Potato:
"""這是烤地瓜的類"""
# 定義初始化方法
def __init__(self):
self.cookedLevel = 0
self.cookedString = "生的"
self.condiments = []
# 烤土豆方法
def cook(self, time):
self.cookedLevel += time
if self.cookedLevel > 8:
self.cookedString = "烤成灰了"
elif self.cookedLevel > 5:
self.cookedString = "烤好了"
elif self.cookedLevel > 3:
self.cookedString = "半生不熟"
else:
self.cookedString = "生的"
# 用來進行測試
myPotato = Potato()
print(myPotato .cookedLevel)
print(myPotato .cookedString)
print(myPotato .condiments)
~~~
:-: 
## 5\. 測試cook方法是否好用
在上面的代碼最后面添加如下代碼:
~~~
print("------接下來要進行烤地瓜了-----")
myPotato.cook(4) #烤4分鐘
print(myPotato.cookedLevel)
print(myPotato.cookedString)
~~~
:-: 
## 6\. 定義`addCondiments()`方法和`__str__()`方法
~~~
def __str__(self):
msg = self.cookedString + " 土豆"
if len(self.condiments) > 0:
msg = msg + "("
for temp in self.condiments:
msg = msg + temp + ", "
msg = msg.strip(", ")
msg = msg + ")"
return msg
def addCondiments(self, condiments):
self.condiments.append(condiments)
~~~
## 7\. 再次測試
完整的代碼如下:
~~~
class Potato:
"""這是烤土豆的類"""
# 定義初始化方法
def __init__(self):
self.cookedLevel = 0
self.cookedString = "生的"
self.condiments = []
# 定制print時的顯示內容
def __str__(self):
msg = self.cookedString + " 土豆"
if len(self.condiments) > 0:
msg = msg + "("
for temp in self.condiments:
msg = msg + temp + ", "
msg = msg.strip(", ")
msg = msg + ")"
return msg
# 烤地瓜方法
def cook(self, time):
self.cookedLevel += time
if self.cookedLevel > 8:
self.cookedString = "烤成灰了"
elif self.cookedLevel > 5:
self.cookedString = "烤好了"
elif self.cookedLevel > 3:
self.cookedString = "半生不熟"
else:
self.cookedString = "生的"
# 添加配料
def addCondiments(self, condiments):
self.condiments.append(condiments)
# 用來測試的代碼
myPotato = Potato()
print("------有了一個土豆,還沒有烤-----")
print(myPotato.cookedLevel)
print(myPotato.cookedString)
print(myPotato.condiments)
print("------接下來要進行烤土豆了-----")
print("------土豆經烤了4分鐘-----")
myPotato.cook(4) #烤4分鐘
print(myPotato)
print("------土豆又經烤了3分鐘-----")
myPotato.cook(3) #又烤了3分鐘
print(myPotato)
print("------接下來要添加配料-番茄醬------")
myPotato.addCondiments("番茄醬")
print(myPotato)
print("------土豆又經烤了5分鐘-----")
myPotato.cook(5) #又烤了5分鐘
print(myPotato)
print("------接下來要添加配料-芥末醬------")
myPotato.addCondiments("芥末醬")
print(myPotato)
~~~
:-: 
- 計算機組成原理和Python基礎知識
- 計算機組成原理
- 編程語言和Python
- 開發第一個Python程序
- 注釋
- 變量以及類型
- 標識符和關鍵字
- 輸出
- 輸入
- 運算符
- 數據類型轉換
- 判斷語句和循環語句
- 判斷語句介紹
- if語句
- 比較、關系運算符
- if...else...語句格式
- if...elif...else語句格式
- if語句的嵌套
- if應用:猜拳游戲
- 循環語句介紹
- while循環
- while循環應用
- while循環的嵌套以及應用
- for循環
- break和continue
- 字符串、列表、元組、字典
- 字符串介紹
- 字符串輸出
- 字符串輸入
- 下標和切片
- 字符串常見操作
- 列表介紹
- 列表的循環遍歷
- 列表的常見操作
- 列表的嵌套
- 元組
- 字典介紹
- 字典的常見操作1
- 字典的常見操作2
- 字典的遍歷
- 集合(擴展)
- 公共方法
- 4.函數(一)
- 4.1.函數介紹
- 4.2.函數定義和調用
- 4.3.函數的文檔說明
- 4.4.函數參數(一)
- 4.5.函數返回值(一)
- 4.6.函數的嵌套調用
- 4.7.函數應用:打印圖形和數學計算
- 5.函數(二)
- 5.1.局部變量
- 5.2.全局變量
- 5.3.多函數程序的基本使用流程
- 5.4.函數返回值(二)
- 5.5.函數參數(二)
- 5.6.拆包、交換變量的值
- 5.7.引用(一)
- 5.8.可變、不可變類型
- 5.9.引用(二)
- 5.10.函數使用注意事項
- 6.強化練習
- 6.1.函數應用:學生管理系統
- 6.2.遞歸函數
- 6.3. 匿名函數
- 6.4.列表推導式
- 6.5.set、list、tuple
- 6.6.高階函數: map reduce filter
- 7.文件操作,綜合應用
- 7.1.文件操作介紹
- 7.2.文件的讀寫
- 7.3.應用1:制作文件的備份
- 7.4.文件的相關操作
- 7.5.應用:批量修改文件名
- 7.6.綜合應用:學生管理系統(文件版)
- 8.面向對象(上)
- 8.1.認識面向對象編程
- 8.2.類和對象
- 8.3.定義類
- 8.4.創建對象
- 8.5.添加和獲取對象的屬性
- 8.6.在方法內通過self獲取對象屬性
- 8.7.魔法方法 - init()
- 8.8.魔法方法 - 有參數的__init__()方法
- 8.9.魔法方法 - str()方法
- 8.10.魔法方法 - del()方法
- 8.11.實操案例 - 烤土豆
- 9.面向對象(中)
- 9.1.實操案例 - 放家具
- 9.2.繼承的概念
- 9.3.單繼承
- 9.4.多繼承
- 9.5.子類重寫父類的同名屬性和方法
- 9.6.子類調用父類同名屬性和方法
- 9.7.多層繼承
- 9.8.通過super()來調用父類的方法
- 10.面向對象(下)
- 10.1.私有屬性和私有方法
- 10.2.修改私有屬性的值
- 10.3.多態
- 10.4.類屬性和實例屬性
- 10.5.靜態方法和類方法
- 11.異常處理與模塊初識
- 11.1.異常
- 11.2.捕獲異常
- 11.3.異常的傳遞
- 11.4.拋出自定義的異常
- 11.5.獲取異常完整信息的正確姿勢
- 11.6.認識模塊
- 11.7.開發模塊
- 11.8.模塊中的__all__(未完成)
- 11.9.python中的包(未完成)
- 12.課后加餐
- 12.1.基礎應用 - 進銷存管理系統(未完成)
- 12.2.基礎應用 - 員工信息管理系統(未完成)
- 12.1.編碼規范 - PEP8編碼規范(未完成)