




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目六烏龜吃魚游戲——面向對象textbook教材Python程序設計項目化教程孫海洋
編著
電子工業出版社ISBN:9787121477546項目描述【項目描述】模擬烏龜吃魚游戲,游戲規則:水池中有一只烏龜和若干條魚,烏龜和魚在水池中游動,如果烏龜遇到魚則把魚吃掉,生命值增加,烏龜游動消耗體力。如果池中所有的魚都被吃掉或者烏龜體力耗盡游戲結束。Contents目錄01.聰明的小狗——類和對象04.愛心募捐——實例變量和類變量02.莫問年齡和存款——私有成員03.生物進化——繼承05.項目實施06.項目小結PartOne聰明的小狗——類和對象掌握類定義結構掌握構造對象的方法掌握通過對象名調用屬性和行為的方式任務描述【任務描述】設計一個狗類,包含名字、品種、年齡等屬性,具備搖尾、趴下、打滾、奔跑等行為。運行結果如下所示。讓我們一起學習類和對象來解決這個問題吧!面向對象和類01面向對象編程OOP是一切皆對象,把具有相同屬性和行為的對象抽象為“類”。02面向對象三大特性為封裝、繼承和多態。03類是編程中創建對象的模板,用class定義,擁有屬性存儲信息和方法執行操作。面向對象和類【類定義格式1】含構造方法【類定義格式2】不含構造方法,系統提供默認的無參構造方法【說明】在Python中,構造方法`__init__`用于初始化新創建的對象,為其屬性賦初值。如果沒有顯式定義構造方法(僅含有self)。析構方法`__del__`在對象被刪除時自動調用。類中的方法通常以`self`作為第一個參數,代表當前對象實例,其余參數根據需要定義。下面,我們來舉幾個例子幫助大家更好理解面向對象和類【案例1】定義一個學生類,包括姓名、年齡、班級等屬性,以及自我介紹方法。【案例2】定義一個鳥類Bird,僅包含飛行方法,不含構造方法。創建對象構造類的對象時,通過類的名字調用構造方法__init__,為該對象的數據成員即屬性賦初值。如果類中沒有顯式定義構造方法或者定義的構造方法除了self外,沒有其他參數,則創建該類對象的格式如下:舉例:在這個例子中,Bird類沒有定義構造方法,因此Python自動提供了一個默認的無參構造方法。當我們創建Bird類的對象b時,我們使用Bird(),括號內是空的,表示沒有傳遞任何參數。然后我們可以調用b對象的fly方法來模擬鳥的飛行行為。創建對象若類中定義的構造方法除了self外還有其他參數,則創建該類對象格式如下:舉例:在這個例子中,Student類有一個構造方法__init__,它接受三個參數:name、age和class_info。創建Student類的對象s1和s2時,需要提供這些參數的值。然后,我們可以通過調用introduce方法來打印每個學生的信息。通過對象訪問屬性和行為訪問對象屬性的格式如下:舉例:在這個例子中,Student類有三個屬性:name、age和cls。我們創建了兩個Student類的對象s1和s2,并且為它們的屬性賦了初值。然后,我們通過點操作符訪問這些屬性,并使用print函數輸出它們的值。通過對象訪問屬性和行為訪問對象行為的格式如下:舉例:在這個例子中,我們定義了一個Student類,它有一個構造方法和一個introduce方法。我們創建了一個Student對象student,并調用了它的introduce方法來打印自我介紹。任務實施__init__是類的構造方法,用于初始化創建的對象。它接受breed(品種)、name(名字)和age(年齡)作為參數,并將它們設置為對象的屬性。speak方法用于模擬小狗的自我介紹,打印出小狗的品種、名字和年齡。wag方法模擬小狗搖尾巴的動作,打印出搖尾巴的小狗的名字。lie方法模擬小狗趴下的動作,打印出趴下的小狗的名字。roll_over方法模擬小狗打滾的動作,打印出打滾的小狗的名字。run方法模擬小狗跑步的動作,參數dis表示距離(米),并打印出小狗的名字和跑的距離。任務實施創建了兩個Dog類的對象dog1和dog2,分別代表兩個不同品種和名字的小狗,以及它們的年齡。調用各類方法運行結果如下:鞏固案例【案例】定義一個圓類,包含屬性半徑,及求周長和面積的方法。參考代碼:PartTwo莫問年齡和存款——私有成員任務描述【任務描述】設計一個Python個人信息類。創建一個Person類,封裝姓名、私有的年齡、分數和存款。實現方法以輸出個人信息、安全地獲取和設置分數、以及模擬賺錢和花錢。在主程序中演示這些功能。讓我們一起學習一下私有成員屬性來完成這個任務吧!私有成員屬性Python類中的屬性默認是公開的,可以自由訪問和修改,這可能違反封裝原則并降低安全性。為了提供封裝和數據保護,Python使用雙下劃線`__`前綴來定義私有屬性,如`__weight`和`__score`。私有屬性只能在類內部訪問,外部代碼不能直接訪問它們。通常,類會提供公共的`get_屬性名`和`set_屬性名`方法來間接訪問和修改這些私有屬性。【錯誤案例】試圖在類外直接訪問私有成員屬性。私有成員屬性【正確案例】通過set***和get***方法可在類外間接訪問私有屬性。定義了一個公開方法getWeight,用于獲取私有屬性__weight的值。定義了一個公開方法setWeight,它接受一個參數newWeight,用于設置私有屬性__weight的新值。newWeight將傳入的newWeight值賦給私有屬性__weight。調用setWeight方法,將體重修改為59.5公斤。任務實施__init__是構造方法,初始化Person對象的屬性。接受姓名、年齡、分數和金錢作為參數,并將它們設置為對象的屬性。其中,年齡、分數和金錢屬性名前使用了雙下劃線__,這表示它們是私有屬性。speak方法用于打印出人的姓名、年齡、分數和余額。返回私有屬性__age的值和私有屬性__score的值。setSc方法接受一個新分數newSc,先打印出修改前的成績,然后更新成績,并打印出修改后的成績。任務實施spend方法接受一個金額amount,將其從余額中減去,并打印出花錢后的信息和當前余額。運行結果如下:PartThree生物進化——繼承掌握類的定義結構掌握構造對象的方法掌握通過對象名調用屬性和行為的方式單繼承單類繼承的格式為:pass表示占位符,通常表示暫時沒實現的函數(方法)體或類體。子類默認繼承父類的非私有屬性和方法。直接調用從父類繼承過來的方法為不重寫父類方法—直接繼承單繼承在子類中重寫父類中的同名方法,相當于把從父類繼承過來的該方法覆蓋掉。該方法為重寫父類方法—方法覆蓋運行結果為:多重繼承多重繼承是子類擁有多個父類,可同時繼承多個父類的屬性和方法。其格式為:【案例】閱讀以下程序,分析其運行結果。【分析】子類Swan擁有兩個父類Bird和Goose,即同時繼承了父類Bird的fly方法,以及父類Goose的swim方法。【說明】多個父類名用逗號間隔,表示子類同時繼承多個父類的屬性和方法。PartFour愛心募捐——實例變量和類變量掌握實例變量的定義和使用掌握類變量的定義和使用任務描述【任務描述】設計一個募捐類,統計輸出實時捐款金額和明細。該項任務涉及實例變量和類變量。實例變量就是屬于對象(實例)的變量(屬性),每個對象均有屬于自己的獨立實例變量。而類變量屬于整個類的所有對象所共有,即“公共空間”。相信同學們對于什么是實例變量和類變量還是一頭霧水,讓我們一起進入實例變量和類變量的學習中吧!實例變量實例變量是指在類的任意方法內部,以self開頭定義的變量(屬性)。實例變量定義self.變量名語法格式實例變量只能通過對象名訪問,不能通過類名訪問。訪問方式
實例變量【案例】閱讀以下代碼,分析其中的實例變量。【分析】在類中的任意方法內以“self.變量名”定義和使用的變量均為“實例變量”,故該類構造方法中的、self.age、self.__score這三個以self開頭的變量均是實例變量。運行結果展示了同一個類`Stu`的不同對象`s1`和`s2`各自擁有獨立的私有實例變量`self.__score`。它們是各自獨立、互不影響的,即都有自己的獨立存儲空間和值。類變量是指在類的所有方法之外定義的變量。定義01語法格式02類變量既可以通過類名訪問,也可以通過對象名訪問,建議通過類名訪問訪問方式03類變量類變量【案例】閱讀以下代碼,分析其中的類變量和實例變量。這段代碼中的`Rect`類展示了類變量和實例變量的區別:`cnt`是類變量,用于統計創建的`Rect`對象數量,所有對象共享;而`self.w`和`self.h`是實例變量,每個`Rect`對象擁有獨立的寬度和高度值。通過類名或對象名訪問類變量`cnt`,可以獲取創建對象的總數。str.center的使用字符串center方法返回指定總寬度width且居中的字符串,fillchar為填充字符,默認為空格。調用格式為:【案例1】字符串內容(如“歡迎光臨”)為偶數(4)位,輸出總位寬為(11),其余填充符7(奇數)位,則左邊多1個填充符。運行結果如下:str.center的使用【案例2】字符串內容(如“南京歡迎您”)為奇數(5)位,輸出總位寬(12),其余填充符7(奇數)位,則右邊多1個填充符。這兩個案例說明了如果填充字符的總數是奇數,center()會在兩邊分配填充字符,但會多放一個在一側,以確保字符串在中間。哪一側更長取決于總寬度和字符串長度的差值。如果填充字符的總數是偶數,則兩側分配的填充字符數量相等。運行結果如下:任務實施運行結果如下:在循環內部,為每個捐款者創建一個Donate類的實例。調用每個捐款者實例的donate方法,傳入隨機生成的捐款金額,更新捐款總額。donate方法接受一個參數num(捐款金額),并將其加到類變量total上,從而更新捐款總額。PartFive項目實施項目實施swim方法讓動物在其邊界內隨機移動,如果碰到邊界會反彈,并且每次移動會消耗動物的體力。項目實施Turtle類繼承自Animal類,表示烏龜,并添加了特有的eat方法來模擬烏龜吃魚后體力的增加,但不超過100。Fish類繼承自Animal類,表示魚,并添加了特有的bubble方法來模擬魚吐泡泡的動作。創建了一只烏龜和10條魚,并將魚存儲在列表fish_ls中。項目實施如果魚和烏龜在同一位置,烏龜會吃掉魚,并從魚的列表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CAS 413-2020排水管道檢測和非開挖修復工程監理規程
- T/CAQI 46-2018家用和類似用途飲用水處理裝置用龍頭
- T/CAPEC 3-2018汽輪機制造監理技術要求
- 疾控中心面試題及答案
- 村務員面試題及答案
- 花式考試題型及答案
- 環境教育考試題及答案
- 青年直腸癌的臨床護理
- 員工愛崗敬業主題演講稿
- 施工項目延遲撥款協議書
- 醫學大數據分析與挖掘
- NB-T 47013.15-2021 承壓設備無損檢測 第15部分:相控陣超聲檢測
- 我國上市公司IPO前后“業績變臉”的實證研究-基于創業板的分析的中期報告
- 老年人神經健康講座內容摘要
- 燃用重質渣油的鋁合金熔煉爐能耗測試與分析
- (新教材)細胞核是細胞生命活動的控制中心(公開課)課件
- 點穴保健DIY智慧樹知到課后章節答案2023年下江西中醫藥大學
- 企業安全生產風險辨識評估管控指導手冊-危險貨物儲罐倉儲
- 內蒙古工業大學計算機網絡試卷A-2023年(含答案)
- 攝錄像技術基礎
- 煙花爆竹勞務合同范本
評論
0/150
提交評論