《Python編程基礎(chǔ)》教學(xué)課件-06面向?qū)ο缶幊蘝第1頁
《Python編程基礎(chǔ)》教學(xué)課件-06面向?qū)ο缶幊蘝第2頁
《Python編程基礎(chǔ)》教學(xué)課件-06面向?qū)ο缶幊蘝第3頁
《Python編程基礎(chǔ)》教學(xué)課件-06面向?qū)ο缶幊蘝第4頁
《Python編程基礎(chǔ)》教學(xué)課件-06面向?qū)ο缶幊蘝第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、任務(wù)6 面向?qū)ο缶幊虒W(xué)生信息管理程序任務(wù)6 面向?qū)ο缶幊虒W(xué)生信息管理程序目錄CONTENTS1任務(wù)描述2面向?qū)ο缶幊谈攀?類和對象4類的方法5對象初始化6繼承7任務(wù)實現(xiàn)目錄CONTENTS1任務(wù)描述2面向?qū)ο缶幊谈攀?類和對象401 任務(wù)描述通過前面內(nèi)容的學(xué)習(xí),了解如何在Python 編程語言中進(jìn)行程序調(diào)試與測試,掌握了調(diào)試和測試的方法,通過調(diào)試猜數(shù)程序詳細(xì)介紹了調(diào)試的過程。本章將學(xué)習(xí)面向?qū)ο缶幊?,并完成“學(xué)生信息管理”的實現(xiàn)?!皩W(xué)生信息管理”程序會通過面向?qū)ο蟮姆椒ㄔO(shè)計學(xué)生類Student,包含一個學(xué)生姓名(Name)、性別(Gender)、年齡(Age),然后設(shè)計學(xué)生記錄管理類Studen

2、tList來管理一組學(xué)生記錄。01 任務(wù)描述通過前面內(nèi)容的學(xué)習(xí),了解如何在Python 編01 任務(wù)描述任務(wù)描述如下:(1)設(shè)計學(xué)生類Student和學(xué)生記錄管理類StudentList;(2)增加學(xué)生記錄的函數(shù)insert與_insert;(3)增加更新記錄的函數(shù)update與_update;(4)設(shè)計刪除記錄的函數(shù)是delete與_delete;(5)啟動無限循環(huán),在命令提示符號“”后面輸入show、insert、update、delete、exit命令,實現(xiàn)學(xué)生信息管理的功能。01 任務(wù)描述任務(wù)描述如下:02 面向?qū)ο缶幊谈攀雒嫦驅(qū)ο缶幊淌亲钣行У能浖帉懛椒ㄖ?,是軟件工程領(lǐng)域中的重要

3、技術(shù),這種軟件開發(fā)思想比較自然地模擬了人類對客觀世界的認(rèn)識,成為當(dāng)前計算機(jī)軟件工程學(xué)的主流方法。Python作為一門面向?qū)ο缶幊陶Z言,掌握面向?qū)ο缶幊趟枷胫陵P(guān)重要,因此,本章我們來學(xué)習(xí)面向?qū)ο缶幊蹋ㄟ^本章的學(xué)習(xí),大家能夠建立面向?qū)ο蟮木幊趟枷?,學(xué)會使用這種思想開發(fā)程序。02 面向?qū)ο缶幊谈攀雒嫦驅(qū)ο缶幊淌亲钣行У能浖帉懛椒ㄖ?2 面向?qū)ο缶幊谈攀雒嫦驅(qū)ο缶幊蘋bject Oriented Programming,簡稱OOP,是一種程序設(shè)計思想。OOP把對象作為程序的基本單元,一個對象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)。面向過程的程序設(shè)計把計算機(jī)程序視為一系列的命令集合,即一組函數(shù)的順序執(zhí)行。為了

4、簡化程序設(shè)計,面向過程把函數(shù)繼續(xù)切分為子函數(shù),即把大塊函數(shù)通過切割成小塊函數(shù)來降低系統(tǒng)的復(fù)雜度。而面向?qū)ο蟮某绦蛟O(shè)計把計算機(jī)程序視為一組對象的集合,而每個對象都可以接收其他對象發(fā)過來的消息,并處理這些消息,計算機(jī)程序的執(zhí)行就是一系列消息在各個對象之間傳遞。在Python中,所有數(shù)據(jù)類型都可以視為對象,當(dāng)然也可以自定義對象。自定義的對象數(shù)據(jù)類型就是面向?qū)ο笾械念悾–lass)的概念。02 面向?qū)ο缶幊谈攀雒嫦驅(qū)ο缶幊蘋bject Orie03 類和對象(1)類與對象簡介在進(jìn)行Python面向?qū)ο缶幊讨?,首先了解幾個術(shù)語:類、類對象、實例對象、屬性、函數(shù)和方法。類是對現(xiàn)實世界中一些事物的封裝,定

5、義一個類可以采用下面的方式來定義:注意:類名后面有個冒號,block要向右邊縮進(jìn),在block塊里面就可以定義屬性和方法了。03 類和對象(1)類與對象簡介注意:類名后面有個冒號,bl03 類和對象(2)類屬性類屬性是與類綁定的,它是被這個類所擁有的,如果要修改類的屬性就必須使用類的名稱訪問它,而不能使用對象實例訪問它。Python的這個功能特性與JavaScript的特性很像,實例有結(jié)合任何屬性的功能,只要執(zhí)行:對象實例.屬性 = .為這個對象實例賦值,那么如果該對象實例存在這個屬性,這個屬性的值就被改變,但是如果不存在該屬性就會自動為該對象實例創(chuàng)建一個這樣的屬性。03 類和對象(2)類屬性

6、03 類和對象(3)訪問的權(quán)限前面的Student中的name和age都是共有的屬性,可以直接在類外通過對象名訪問,如果想定義成為私有的,則需要在前面添加2個下畫線“_”。創(chuàng)建一個文檔Student3.py,具體代碼如下。03 類和對象(3)訪問的權(quán)限03 類和對象(4)案例:Student類屬性執(zhí)行后,運(yùn)行結(jié)果如下。由此可見,通過對象p與Person類名稱都可以讀取到類屬性name、gender、age。03 類和對象(4)案例:Student類屬性執(zhí)行后,運(yùn)行結(jié)04 類的方法(1)實例方法實例方法就是通過實例對象調(diào)用的方法,在類中可以根據(jù)需要定義一些方法,定義方法采用def關(guān)鍵字,在類中定

7、義的方法至少會有一個參數(shù),一般以名為self的變量作為該參數(shù)(用其他名稱也可以),而且需要作為第一個參數(shù)。04 類的方法(1)實例方法04 類的方法(2)類方法在類中可以定義屬于類的屬性,也可以定義屬于類的方法,這種方法要使用classmethod來修飾,而且第一個參數(shù)一般命名為cls(也可以是別的名稱)。創(chuàng)建文檔Student6.py,具體案例代碼如下。執(zhí)行后,運(yùn)行結(jié)果如下。04 類的方法(2)類方法執(zhí)行后,運(yùn)行結(jié)果如下。04 類的方法(3)靜態(tài)方法靜態(tài)函數(shù)通過staticmethod修飾,要訪問類的靜態(tài)函數(shù),可以采用類名稱調(diào)用。在調(diào)用這類的函數(shù)時,不會向函數(shù)傳遞任何參數(shù)。執(zhí)行后,運(yùn)行結(jié)果如

8、下。04 類的方法(3)靜態(tài)方法執(zhí)行后,運(yùn)行結(jié)果如下。04 類的方法(3)靜態(tài)方法靜態(tài)函數(shù)通過staticmethod修飾,要訪問類的靜態(tài)函數(shù),可以采用類名稱調(diào)用。在調(diào)用這類的函數(shù)時,不會向函數(shù)傳遞任何參數(shù)。執(zhí)行后,運(yùn)行結(jié)果如下。其中,display就是靜態(tài)方法,show是類方法,它們都是用Student類名稱調(diào)用,只是Student.show()會把Student傳遞給def show(classme)的參數(shù)classme,但是Student.disp()不傳遞任何參數(shù)。classmethod修飾的函數(shù)與staticmethod修飾的函數(shù)最大的區(qū)別是classmethod的函數(shù)被類名稱或者類

9、調(diào)用時會傳遞一個類的名稱給它的第一個參數(shù),但是staticmethod的函數(shù)被類名稱或者類實例調(diào)用時就不會傳遞任何參數(shù)給這個函數(shù)。04 類的方法(3)靜態(tài)方法執(zhí)行后,運(yùn)行結(jié)果如下。其中,di04 類的方法(4)案例:Student類方法通過編寫學(xué)生個人信息類實例方法、類方法以及靜態(tài)方法,然后通過程序分析其方法的調(diào)用。我們需要創(chuàng)建一個文檔Student8.py,具體案例代碼如下。執(zhí)行后,運(yùn)行結(jié)果如下。使用類方法classShow()一般采用類的名稱調(diào)用,調(diào)用時需要向類方法傳遞類參數(shù),例如:Student.classShow();使用靜態(tài)方法調(diào)用,一般采用類的名稱調(diào)用,調(diào)用時不需要向靜態(tài)方法傳遞任

10、何參數(shù)。04 類的方法(4)案例:Student類方法執(zhí)行后,運(yùn)行結(jié)05 對象初始化在面向?qū)ο蟮某绦蛟O(shè)計中,對象實例化往往要對實例做一些初始化的工作,例如設(shè)置實例屬性的初始值,而這些工作是自動完成的,因此有默認(rèn)的方法被調(diào)用,這個默認(rèn)的方法就是構(gòu)造函數(shù),與之匹配的是析構(gòu)函數(shù)。05 對象初始化在面向?qū)ο蟮某绦蛟O(shè)計中,對象實例化往往要對實05 對象初始化(1)構(gòu)造方法與析構(gòu)方法在Python中有一些內(nèi)置的方法,這些方法命名都有比較特殊的地方,比如其方法名以2個下畫線開始然后以2個下畫線結(jié)束。類中最常用的就是構(gòu)造方法和析構(gòu)方法。構(gòu)造方法_init_(self,.)在生成對象時調(diào)用,可以用來進(jìn)行一些初始

11、化操作,不需要顯示去調(diào)用,系統(tǒng)會默認(rèn)去執(zhí)行。如果用戶自己沒有重新定義構(gòu)造的方法,系統(tǒng)就會自動執(zhí)行默認(rèn)的構(gòu)造方法。建立構(gòu)造方法的格式如下:class 類名(): Def _init_(參數(shù)): 構(gòu)造方法主體部分05 對象初始化(1)構(gòu)造方法與析構(gòu)方法05 對象初始化(2)對象的初始化構(gòu)造函數(shù)_init_是建立對象實例的自動調(diào)用函數(shù),可以在這個函數(shù)中為實例對象初始化屬性值。下面,我們通過實例介紹對象的初始化,新建一個文檔student11.py,代碼如下。執(zhí)行后,運(yùn)行結(jié)果如下。在本程序中,執(zhí)行語句p=Student(李麗,女,21)時調(diào)用_init_函數(shù),并傳遞4個參數(shù)給它,通過以下語句這個實例生

12、成了name,gender,age屬性,而且值由參數(shù)n、g、a確定。注意這幾個屬性是實例對象自己的屬性,不是類Student的類屬性。05 對象初始化(2)對象的初始化執(zhí)行后,運(yùn)行結(jié)果如下。在本05 對象初始化(3)self參數(shù)類的實例方法都至少帶有一個參數(shù),而且第一個參數(shù)通常命名為self,在實例調(diào)用這個方法時會把實例自己傳遞給這個self參數(shù)。下面,我們通過實例來解釋self參數(shù),新建文檔student13.py,代碼如下。執(zhí)行后,運(yùn)行結(jié)果如下。其中Student.show(p)的效果與p.show()是一樣的,只是Student.show(p)時直接把實例p傳遞給self參數(shù),而p.sh

13、ow()調(diào)用時p默認(rèn)自動傳遞給show的是self,因此在show中都可以使用,self.gender,self.age訪問到p的屬性。05 對象初始化(3)self參數(shù)執(zhí)行后,運(yùn)行結(jié)果如下。其中05 對象初始化(4)案例:日期類通過編寫一個日期類MyDate,擁有年月日的數(shù)據(jù),定義MyDate._init_函數(shù)實現(xiàn)對象的初始化,在數(shù)據(jù)不合理時拋出異常。新建文檔MyDate.py,代碼如下。執(zhí)行后,運(yùn)行結(jié)果如下。05 對象初始化(4)案例:日期類執(zhí)行后,運(yùn)行結(jié)果如下。06 繼承面向?qū)ο缶幊?(OOP) 語言的一個主要功能就是“繼承”。繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能,并在無須重

14、新編寫原來的類的情況下對這些功能進(jìn)行擴(kuò)展。通過繼承創(chuàng)建的新類被稱為“子類”或“派生類”,被繼承的類被稱為“基類”“父類”或“超類”,繼承的過程,就是從一般到特殊的過程。在某些 OOP 語言中,一個子類可以繼承多個基類。但是一般情況下,一個子類只能有一個基類,要實現(xiàn)多重繼承,可以通過多級繼承來實現(xiàn)。06 繼承面向?qū)ο缶幊?(OOP) 語言的一個主要功能就是“06 繼承繼承概念的實現(xiàn)方式主要有2類:實現(xiàn)繼承、接口繼承。實現(xiàn)繼承是指使用基類的屬性和方法,而無須額外編碼的能力;接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現(xiàn)的能力(子類重構(gòu)父類方法)。在考慮使用繼承時,有一點(diǎn)需要注意,那就是兩

15、個類之間的關(guān)系應(yīng)該是“屬于”關(guān)系。例如,Employee 是一個人,Manager 也是一個人,因此這兩個類都可以繼承 Person 類。但是 Leg 類卻不能繼承 Person 類,因為腿并不是一個人。06 繼承繼承概念的實現(xiàn)方式主要有2類:實現(xiàn)繼承、接口繼承。06 繼承(1)派生與繼承定義一個學(xué)生類Student-com,包含姓名name、性別gender、年齡age,還包含所學(xué)專業(yè)的major、所在院系dept,那么就沒有必要重新定義Student類,只要從已經(jīng)定義的Student類繼承過來就行。新建一個文檔student14.py,代碼如下。執(zhí)行后,運(yùn)行結(jié)果如下。06 繼承(1)派生與

16、繼承執(zhí)行后,運(yùn)行結(jié)果如下。06 繼承(2)構(gòu)造函數(shù)的繼承從Student-com類的定義可以看出派生類的構(gòu)造函數(shù)除了完成自己新增加的major、dept屬性的初始化外,還要調(diào)用基類Student的構(gòu)造函數(shù),而且還要顯示調(diào)用,即:Student._init_(self,name,gender,age)通過類名稱Student直接調(diào)用Student的_init_函數(shù),并且提供所要的4個參數(shù),繼承類是不會自動調(diào)用基類的構(gòu)造函數(shù)的,必須顯示調(diào)用。06 繼承(2)構(gòu)造函數(shù)的繼承06 繼承(3)屬性方法的繼承如果一個基類中有一個實例方法,在繼承類中也可以重新定義完全一樣的實例方法,例如Student有sh

17、ow方法,在Student-com中也有一樣的show方法,它們是不會混淆的,稱Student-com類的show重寫了Student的show。當(dāng)然一個基類的實例方法也可以不被重寫,派生類會繼承這個基類的實例方法,派生類也可以增加自己的新實例方法。06 繼承(3)屬性方法的繼承06 繼承(4)案例:日期時間類前面我們通過編寫一個日期類MyDate,擁有年月日的數(shù)據(jù),接下來,再增加時分秒的數(shù)據(jù),派生出日期時間類MyDateTime。新建文檔MyDateTime.py,代碼如下。執(zhí)行后,運(yùn)行結(jié)果如下。06 繼承(4)案例:日期時間類執(zhí)行后,運(yùn)行結(jié)果如下。07 任務(wù)實現(xiàn)本項目通過面向?qū)ο蟮姆椒ㄔO(shè)計

18、學(xué)生類Student,包含一個學(xué)生姓名(Name)、性別(Gender)、年齡(Age),然后設(shè)計學(xué)生記錄管理類StudentList來管理一組學(xué)生記錄。代碼如課表所示。在本程序中首先設(shè)計學(xué)生類Student,然后設(shè)計學(xué)生記錄管理類StudentList,在該類中有一個students=是一個列表,列表的每個元素是一個Student對象,這樣就記錄了一組學(xué)生。增加學(xué)生記錄的函數(shù)是insert與_insert,其中insert函數(shù)完成學(xué)生信息的輸入,_insert完成學(xué)生的真正插入,插入時通過掃描學(xué)生學(xué)號No確定插入學(xué)生的位置,保證插入的學(xué)生是按照學(xué)號從小到大排列的。07 任務(wù)實現(xiàn)本項目通過面向?qū)ο蟮姆椒ㄔO(shè)計學(xué)生類Studen07 任務(wù)實現(xiàn)更新記錄的函數(shù)是update與_update,其中update完成學(xué)生信息的輸入,_update完成學(xué)生記錄的真正更新,更新時通過掃描學(xué)生學(xué)號No確定學(xué)生的位置,學(xué)號不能更新。刪除記錄的函數(shù)是delete與_delete,其中delete完成學(xué)生學(xué)號的刪除,_de

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論