1. 程式人生 > 其它 >第七章例項與實戰

第七章例項與實戰

例項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()

執行結果如下: