第七章例項與實戰
例項01:建立大雁類並定義飛行方法
在IDLE中建立一個名稱為geese.py 的檔案,然後在該檔案中定義一個大雁類Geese,並定義一個構造方法,然後再定義一個例項方法fly(),該方法有兩個引數,一個是self,另一個用於指定飛行狀態,最後再建立大雁類的例項,並呼叫例項方法 fly()。
程式碼如下:
class Geese: '''大雁類''' def __init__(self, beak, wing, claw): #構造器 print("我是大雁類!我有以下特徵:") print(beak) print(wing) print(claw) def fly(self, state): print(state) #呼叫方法 beak_1 = "喙的基部較高,長度和頭部的長度幾乎相等" wing_1 = "翅膀長而尖" claw_1 = "爪子是璞狀的" whildGoose = Geese(beak_1, wing_1, claw_1) whildGoose.fly("我飛行的時候,一會兒排成個人字,一會排成個一字")
執行結果如下:
例項02:通過類屬性統計類的例項個數
在 IDLE中建立一個名稱為geese_a.py 的檔案,然後在該檔案中定義一個雁類Geese,並在該類中定義4個類屬性,前3個用於記錄雁類的特徵,第4個用於記錄例項編號,然後定義一個構造方法,在該構造方法中將記錄例項編號的類屬性進行加1操作,並輸出4個類屬性的值,最後通過for迴圈建立4個雁類的例項。
程式碼如下:
class Geese: '''雁類''' neck = "脖子較長" wing = "振翅頻率高" leg = "腿位於身體的中心支點,行走自如" number = 0 def __init__(self): #構造器 Geese.number += 1 print("\n我是第" + str(Geese.number) + "只大雁,我屬於雁類!我有以下特徵:") print(Geese.neck) print(Geese.wing) print(Geese.leg) #建立四個雁類的物件 list1 = [] for i in range(4): list1.append(Geese()) print("一共有" + str(Geese.number) + "只大雁")
執行結果如下:
例項03:在模擬電影點播功能時應用屬性
在IDLE中建立一個名稱為film.py 的檔案,然後在該檔案中定義一個電視節目類TVshow,並在該類中定義一個類屬性,用於儲存電影列表,然後在_init_()方法中定義一個私有的例項屬性,再將該屬性轉換為可讀取、可修改(有條件進行)的屬性,最後建立類的例項,並獲取和修改屬性值。
程式碼如下:
class TVshow: list_film = ["戰狼2", "紅海行動", "西遊記女兒國", "熊出沒·變形記"] def __init__(self, show): self.__show = show @property #將方法轉換為屬性 def show(self): return self.__show #返回私有屬性的值 @show.setter #設定setter方法,修改稀有屬性的值 def show(self, value): if value in TVshow.list_film: #判斷值是否在列表中 self.__show = "您選擇了《" + value + "》, 稍後將播放" else: self.__show = "您點播的電影不存在" tvshow = TVshow("戰狼2") print("正在播放:《", tvshow.show, "》") print("您可以從", tvshow.list_film, "中選擇要播放的電影") tvshow.show = "紅海行動" print(tvshow.show)
執行結果如下:
例項04:建立水果基類及其派生類
在IDLE中建立一個名稱為 fruit.py 的檔案,然後在該檔案中定義一個水果類Fruit(作為基類),並在該類中定義一個類屬性(用於儲存水果預設的顏色)和一個harvest()方法,然後建立Apple類和Orange類,都繼承自Fruit類,最後建立Apple類和Orange類的例項,並呼叫harvest()方法(在基類中編寫)。
程式碼如下:
class Fruit: color = "綠色" def harvest(self, color): print("水果是:" + color + "的!") #輸出形參color print("水果已經收穫......") print("水果原來是:" + Fruit.color + "的!"); #輸出類屬性color class Apple(Fruit): #繼承父類Fruit color = "紅色" def __init__(self): print("我是蘋果") class Orange(Fruit): color = "橙色" def __init__(self): print("\n我是橘子") apple = Apple() apple.harvest(apple.color) #呼叫父類的harvest方法 orange = Orange() orange.harvest(orange.color) #呼叫父類的harvest方法
執行結果如下:
例項05:在派生類中呼叫基類的__init__()方法定義類屬性
在IDLE中建立一個名稱為fruit.py的檔案,然後在該檔案中定義一個水果類Fruit〈作為基類),並在該類中定義_init_()方法,在該方法中定義一個類屬性(用於保仔水果預設的顏巴),然石仕Fruit類中定義一個harvest()方法,再建立Apple類和 Sapodilla類,都繼承自Fruit類,最後建立Apple類和Sapodilla類的例項,並呼叫harvest()方法(在基類中編寫)。
程式碼如下:
class Fruit: #父類 def __init__(self, color = "綠色"): Fruit.color = color def harvest(self, color): print("水果是:" + self.color + "的!") #輸出形參color print("水果已經收穫......") print("水果原來是:" + Fruit.color + "的!") #輸出類屬性color class Apple(Fruit): color = "紅色" def __init__(self): print("我是蘋果") super().__init__() #呼叫父類的構造器 class Sapodilla(Fruit): def __init__(self, color): print("\n我是人蔘果") super().__init__(color) #呼叫父類的構造器 #重寫父類harvest()方法 def harvest(self, color): print("人蔘果是:" + self.color + "的!") # 輸出形參color print("人蔘果已經收穫......") print("人蔘果原來是:" + Fruit.color + "的!") #輸出類屬性color apple = Apple() apple.harvest(apple.color) sapodilla = Sapodilla("白色") sapodilla.harvest("金黃色帶紫色條紋")
執行結果如下:
實戰一:修改手機預設語言
模智慧手機的預設語言為英文,但製造手機時可以將預設語言設定為中文。編寫手機類,採用無參構造方法時,表示使用預設語言設計,利用有參構造方法時,修改手機的預設語言。效果如圖7.22所示。
程式碼如下:
class Phone: def __init__(self, language = "英文"): if language == "英文": print("智慧手機的預設語言為英文") else: print("將智慧手機的預設語言設定為" + language) phone1 = Phone() phone2 = Phone("中文") # Python的建構函式是不能過載一個類只能有一個建構函式存在。 # 定義多個構造方法時,例項化類只例項化最後的構造方法 # 即後面的構造方法會覆蓋前面的構造方法
執行結果如下:
實戰二:給信用卡設定預設密碼
建立信用卡類,並且為該類建立一個構造方法,該構造方法有3個引數,分別是self、卡號和密碼。其中,密碼可以設定一個預設值123456,代表預設密碼。在建立類的例項時,如果不指定密碼,就採用預設密碼,否則要重置密碼。效果如圖7.23所示。
程式碼如下:
class Card: def __init__(self, id, pwd = "123456"): if pwd == "123456": print("信用卡" + str(id) + "的預設密碼為" + str(pwd)) else: print("重置信用卡" + str(id) + "的密碼為" + str(pwd)) card1 = Card("40137335633800642") card2 = Card("40137335633800642", "168779")
執行結果如下:
實戰三:列印每月銷售明細
模擬實現輸出進銷存管理系統中的每月銷售明細,執行程式,輸入要查詢的月份,如果輸入的月份存在銷售明細,則顯示本月商品銷售明細;如果輸入的月份不存在或不是數字,則提示“該月沒有銷售資料或者輸入的月份有誤!”。效果如圖7.24所示。
程式碼如下:
class Sale: def __init__(self): self.details = {'2': ['商品編號:T0001 商品名稱:膝上型電腦', '商品編號:T0002 商品名稱:華為榮耀6X', '商品編號:T0003 商品名稱:iPad', '商品編號:T0004 商品名稱:華為榮耀V9', '商品編號:T0005 商品名稱:MacBook']} def showInfo(self, month): #查詢商品明細 if month in self.details: print(str(month) + "月份的商品銷售明細如下:") for item in self.details[month]: print(item) else: print("該月份沒有銷售資料或輸入月份有誤!") print("————————————————銷售明細——————————————————") sale = Sale() while(True): month = input("請輸入要查詢的月份(比如1、2、3等,輸入0退出):") if month == '0': break sale.showInfo(month)
執行結果如下:
實戰四:模擬電影院的自動售票機選票頁面
在電影院中觀看電影是一項很受歡迎的休閒娛樂,現請模擬電影院自動售票機中自動選擇電影場次的頁面,例如,一部電影在當日的播放時間有很多,可以自動選擇合適的場次。效果如圖7.25所示。
程式碼如下:
class Movie: movie_name = '' sessions = '' seat = '' def __init__(self): print('\n歡迎使用自動售票機~~') def choiceMovie(self, name): #選擇電影 Movie.movie_name = name print("已選電影:" + Movie.movie_name) def choiceSessions(self, sessions): #選擇場次 Movie.sessions = "2018.4.12 " + sessions print('電影場次:' + sessions) def seats(self, seat): #選擇座位 Movie.seat = seat print('選擇座位:' + seat) def showInfo(self): print("電影:" + Movie.movie_name) print("播出時間:" + Movie.sessions) print("座位:" + Movie.seat) print('\n出票完成,請別忘記取票') movie1 = Movie() print('\n請選擇正在上映的電影:1、《長津湖》 2、《戰狼2》3、《紅海行動》') movie1.choiceMovie(input()) print('\n請選擇電影播放場次:1、9:30 2、10:40 3、12:00') movie1.choiceSessions(input()) print('\n請選擇座位剩餘座位:10-01, 10-02, 10-03, 10-04') movie1.seats(input()) print('\n正在出票。。。\n') # 電影票資訊 movie1.showInfo()
執行結果如下: