《Python程序設(shè)計(jì)基礎(chǔ)》-課件 項(xiàng)目七 Python 面向?qū)ο骭第1頁
《Python程序設(shè)計(jì)基礎(chǔ)》-課件 項(xiàng)目七 Python 面向?qū)ο骭第2頁
《Python程序設(shè)計(jì)基礎(chǔ)》-課件 項(xiàng)目七 Python 面向?qū)ο骭第3頁
《Python程序設(shè)計(jì)基礎(chǔ)》-課件 項(xiàng)目七 Python 面向?qū)ο骭第4頁
《Python程序設(shè)計(jì)基礎(chǔ)》-課件 項(xiàng)目七 Python 面向?qū)ο骭第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

任務(wù)1認(rèn)識(shí)類對(duì)象和實(shí)例對(duì)象01任務(wù)2認(rèn)識(shí)屬性02任務(wù)3認(rèn)識(shí)方法03282任務(wù)4認(rèn)識(shí)繼承04任務(wù)5認(rèn)識(shí)可迭代對(duì)象——迭代器和生成器05任務(wù)1

認(rèn)識(shí)類對(duì)象和實(shí)例對(duì)象2831.?了解對(duì)象的定義。2.?了解面向?qū)ο蟮奶匦浴?.?了解類和實(shí)例的定義及使用。4.?能正確使用類對(duì)象和實(shí)例對(duì)象。任務(wù)目標(biāo)284一、對(duì)象的定義所謂對(duì)象,從概念層面來看,是對(duì)某種事物的抽象表示(包含功能和屬性)。抽象可以分為兩個(gè)方面:數(shù)據(jù)抽象和過程抽象。數(shù)據(jù)抽象定義了對(duì)象的屬性,而過程抽象定義了對(duì)象的操作。相關(guān)知識(shí)285在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,強(qiáng)調(diào)將數(shù)據(jù)(屬性)和操作(服務(wù))融合成一個(gè)不可分割的單元,即對(duì)象。外部使用對(duì)象時(shí),只需知道它的功能,而不必了解內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。在規(guī)范層面,對(duì)象是一系列可被其他對(duì)象使用的公共接口,實(shí)現(xiàn)了對(duì)象間的交互。從編程語言的角度,對(duì)象將數(shù)據(jù)和代碼(程序)封裝在一起,實(shí)現(xiàn)了信息的隱藏。通過類創(chuàng)建的實(shí)例被稱為對(duì)象。類和對(duì)象的關(guān)系類似汽車的設(shè)計(jì)圖紙與實(shí)際汽車的關(guān)系。設(shè)計(jì)圖紙(類)本身并不具備可用性,只有通過圖紙制造出來的汽車(對(duì)象)才能被使用。這種模型能夠幫助開發(fā)者更好地組織和管理代碼,實(shí)現(xiàn)代碼的重用和擴(kuò)展。286二、面向?qū)ο蟮奶匦?.?封裝封裝是面向?qū)ο蟮闹饕匦裕侵赴芽陀^事物抽象并封裝成對(duì)象,即將數(shù)據(jù)成員、屬性、方法和事件等集合在一個(gè)整體內(nèi)。通過訪問控制還可以隱藏內(nèi)部成員,但只允許可信的對(duì)象訪問或操作部分?jǐn)?shù)據(jù)或方法。封裝保證了對(duì)象的獨(dú)立性,可以防止外部程序破壞對(duì)象的內(nèi)部數(shù)據(jù),同時(shí)便于對(duì)程序維護(hù)和修改。2872.?繼承繼承是面向?qū)ο蟮某绦蛟O(shè)計(jì)中代碼重用的主要方法。繼承允許使用現(xiàn)有類的功能,并在無須重新改寫原來類的情況下對(duì)這些功能進(jìn)行擴(kuò)展。繼承可以避免代碼復(fù)制和相關(guān)的代碼維護(hù)等問題。2883.?多態(tài)性派生類繼承了基類的所有非私有數(shù)據(jù)和行為,同時(shí)能夠定義自己的新數(shù)據(jù)和行為。因此,派生類擁有兩個(gè)有效的類型:自身的類型以及它所繼承的基類的類型。這種特性使得一個(gè)對(duì)象可以展現(xiàn)出多種不同類型的能力,這被稱為多態(tài)性。通過繼承,派生類能夠在已有基礎(chǔ)之上,擴(kuò)展和定制基類,同時(shí)可以添加新的屬性和方法。多態(tài)性則使得可以在不同的上下文中使用相同的對(duì)象,從而實(shí)現(xiàn)更靈活和通用的代碼設(shè)計(jì)。多態(tài)性能夠在運(yùn)行時(shí)自動(dòng)地選擇適當(dāng)?shù)姆椒ɑ蛐袨?,從而提高代碼的可擴(kuò)展性和可維護(hù)性。289三、類的定義類使用關(guān)鍵字class聲明。類的聲明格式如下。class類名:類體其中,類名為有效的標(biāo)識(shí)符,通常由多個(gè)單詞組成,每個(gè)單詞的首字母大寫,其余字母小寫,這有助于提高代碼的可讀性和可維護(hù)性。類體是由縮進(jìn)的一系列語句組成的塊。290在類體內(nèi)部定義的元素被視為類的成員。類的主要成員可以分為兩種類型:描述狀態(tài)的數(shù)據(jù)成員(也稱為屬性)和描述操作的函數(shù)成員(也稱為方法)。值得注意的是,Python中的class語句實(shí)際上是一個(gè)復(fù)合語句,它不僅定義了一個(gè)類,更是在Python解釋器執(zhí)行時(shí)創(chuàng)建了一個(gè)類對(duì)象。這個(gè)類對(duì)象可以看作一個(gè)模板,根據(jù)這個(gè)模板可以創(chuàng)建出許多實(shí)例,每個(gè)實(shí)例都具有類定義中所描述的屬性和方法。這種面向?qū)ο蟮乃枷霝榇a的設(shè)計(jì)和組織提供了更加靈活和可復(fù)用的方式。291四、實(shí)例的定義類是抽象的,如果要使用類定義的功能,就必須實(shí)例化類,即創(chuàng)建類的對(duì)象。在創(chuàng)建實(shí)例對(duì)象后,可以使用“.”運(yùn)算符來調(diào)用其成員。注意:創(chuàng)建類的對(duì)象、創(chuàng)建類的實(shí)例、實(shí)例化類等說法是等價(jià)的,都是以類為模板生成了一個(gè)對(duì)象。實(shí)例對(duì)象的調(diào)用格式如下。anObject=類名(參數(shù)列表)anObject.對(duì)象函數(shù)或anObject.對(duì)象屬性292Python創(chuàng)建對(duì)象的方法無須使用關(guān)鍵字new,而是直接像調(diào)用函數(shù)一樣調(diào)用類對(duì)象并傳遞參數(shù),因此,類對(duì)象是可調(diào)用對(duì)象。在Python內(nèi)置函數(shù)中,bool、int、str、list、dict、set等均為可調(diào)用內(nèi)置類對(duì)象,在有的場合也稱之為函數(shù),如使用str函數(shù)把數(shù)值“123”轉(zhuǎn)換成字符串的形式“str(123)”。293五、類對(duì)象和實(shí)例對(duì)象的使用訪問類的成員(屬性和方法)主要有兩種方式:使用類對(duì)象和使用實(shí)例對(duì)象。1.?使用類對(duì)象訪問成員當(dāng)使用類對(duì)象訪問成員時(shí),可以直接通過類名訪問類的屬性和方法。這樣的訪問方式適用于類的靜態(tài)屬性和靜態(tài)方法,它們不依賴于實(shí)例對(duì)象的創(chuàng)建。這種方式更適合處理類級(jí)別的數(shù)據(jù)或方法。2942.?使用實(shí)例對(duì)象訪問成員當(dāng)創(chuàng)建類的實(shí)例對(duì)象后,可以使用實(shí)例對(duì)象訪問實(shí)例屬性和實(shí)例方法。實(shí)例對(duì)象可以擁有自己的屬性值,同時(shí)可以訪問類的屬性和方法。這種方式更適合處理實(shí)例特定的數(shù)據(jù)和方法。295任務(wù)2

認(rèn)識(shí)屬性2961.?熟悉實(shí)例屬性和類屬性的概念,并能正確區(qū)分。2.?了解私有屬性和公有屬性的區(qū)別。3.?了解@property修飾器的作用。4.?能正確使用類屬性和實(shí)例屬性。任務(wù)目標(biāo)297在一個(gè)類中,數(shù)據(jù)成員是指在類定義內(nèi)部聲明的成員變量,也稱為域。這些成員變量用來存儲(chǔ)描述類特征的值,即屬性。屬性可以通過該類中定義的方法進(jìn)行訪問,同時(shí)可以通過類對(duì)象或?qū)嵗龑?duì)象進(jìn)行訪問。屬性實(shí)際上就是在類中的變量,而在Python中,變量不需要預(yù)先聲明,可以直接使用。建議在類定義的開始位置初始化類對(duì)象的屬性,或者在類的構(gòu)造函數(shù)(通常是__init__()方法)中初始化實(shí)例對(duì)象的屬性。這樣可以確保在使用類或?qū)嵗龝r(shí),屬性已經(jīng)有了初始值,避免在使用過程中出現(xiàn)調(diào)用屬性值錯(cuò)誤等問題。相關(guān)知識(shí)298299一、實(shí)例屬性通過“self.變量名”定義的屬性稱為實(shí)例屬性,也稱為實(shí)例變量。類的每個(gè)實(shí)例都包含了該類的實(shí)例變量的一個(gè)單獨(dú)副本,實(shí)例變量屬于特定的實(shí)例。實(shí)例變量在類的內(nèi)部通過self訪問,在類的外部通過對(duì)象實(shí)例訪問。實(shí)例屬性一般在__init__()方法中通過如下形式初始化。__init__()為類的初始化函數(shù),用于定義初始化程序或變量。self.實(shí)例變量名=初始值在其他實(shí)例函數(shù)中通過self訪問,具體如下。self.實(shí)例變量名=值

#寫入self.實(shí)例變量名

#讀取或者在創(chuàng)建實(shí)例后通過實(shí)例訪問,具體如下。obj1=類名()

#創(chuàng)建實(shí)例obj1.實(shí)例變量名=值

#寫入obj1.實(shí)例變量名

#讀取300301二、類屬性在Python中,開發(fā)者可以聲明屬于類對(duì)象本身的變量,即類屬性,也稱為類變量或靜態(tài)屬性。與實(shí)例屬性不同,類屬性屬于整個(gè)類,而不是特定實(shí)例的一部分,這意味著所有從該類創(chuàng)建的實(shí)例共享同一個(gè)屬性副本。無論創(chuàng)建了多少個(gè)實(shí)例,這種屬性的值對(duì)于該類的所有實(shí)例都是相同的。這種在類級(jí)別定義的屬性通常用于存儲(chǔ)與整個(gè)類相關(guān)的常量、配置信息或者共享數(shù)據(jù)。通過在類定義內(nèi)部直接聲明,可以在所有實(shí)例中方便地訪問和使用這些屬性,而不必為每個(gè)實(shí)例分別定義相同的值。這樣一來,類對(duì)象屬性提供了一種有效的方式來管理和維護(hù)類級(jí)別的數(shù)據(jù)。類屬性一般在類體中通過如下形式初始化。類變量名=初始值在其定義的方法中或外部代碼中通過類名訪問,具體如下。類名.類變量名=值

#寫入類名.類變量名

#讀取注意:類屬性如果通過“obj.屬性名”來訪問,則屬于該類的實(shí)例屬性。雖然類屬性可以使用實(shí)例來訪問,但容易造成困惑,所以建議用戶不要這樣使用,而是使用標(biāo)準(zhǔn)的訪問方式“類名.類變量名”。302303三、私有屬性和公有屬性Python類的成員沒有訪問控制限制,這與其他面向?qū)ο蟪绦蛟O(shè)計(jì)語言不同。Python通常約定以兩個(gè)下畫線開頭,但是不以兩個(gè)下畫線結(jié)束的屬性是私有的,其他為公有的。盡管Python并沒有嚴(yán)格的訪問控制機(jī)制,但是約定是很重要的,在編寫代碼時(shí)盡量遵循這些約定,以便提高代碼的可讀性和可維護(hù)性。注意:不能直接訪問私有屬性,但可以在方法中訪問。304四、@property修飾器面向?qū)ο缶幊痰姆庋b性原則強(qiáng)調(diào)不直接訪問類中的數(shù)據(jù)成員,在Python中可以通過定義私有屬性來實(shí)現(xiàn),并且可以編寫相應(yīng)的用于訪問這些私有屬性的函數(shù),用@property修飾器修飾這些函數(shù)。這種方式允許程序?qū)⑦@些函數(shù)當(dāng)作屬性來訪問,從而提供了更加友好和靈活的訪問方式。@property修飾器的默認(rèn)行為是提供只讀屬性,這意味著開發(fā)者可以通過這些訪問器函數(shù)讀取屬性的值,但不能直接對(duì)屬性進(jìn)行修改。如果有需要,還可以使用對(duì)應(yīng)的getter、setter和deleter修飾器實(shí)現(xiàn)其他類型的訪問器函數(shù)。通過這些修飾器,可以更精細(xì)地控制屬性的讀取、修改和刪除操作,同時(shí)能在屬性被訪問或修改時(shí)執(zhí)行一些額外的操作,以實(shí)現(xiàn)更豐富的數(shù)據(jù)管理和封裝。305任務(wù)3

認(rèn)識(shí)方法3061.?了解方法的概念。2.?熟悉常用的方法并能靈活運(yùn)用。3.?了解方法的重載。4.?能正確定義和使用方法。任務(wù)目標(biāo)307一、實(shí)例方法一般情況下,類方法的第一個(gè)參數(shù)一般為self,這種方法稱為實(shí)例方法。實(shí)例方法對(duì)類的某個(gè)給定的實(shí)例進(jìn)行操作,可以通過self顯式地訪問該實(shí)例。實(shí)例方法的聲明格式如下。def方法名(self,[形參列表]):函數(shù)體相關(guān)知識(shí)308實(shí)例方法的調(diào)用格式如下。對(duì)象.方法名([實(shí)參列表])雖然類方法的第一個(gè)參數(shù)為self,但調(diào)用時(shí)用戶不需要也不能給該參數(shù)傳遞值。事實(shí)上,Python會(huì)自動(dòng)把實(shí)例傳遞給該參數(shù)。注意:Python中的self等價(jià)于C++中的self指針和Java、C#中的this關(guān)鍵字。雖然沒有限制第一個(gè)參數(shù)名必須為self,但建議遵循慣例,這樣便于閱讀和理解,且集成開發(fā)環(huán)境也會(huì)提供相應(yīng)的支持。309310二、靜態(tài)方法Python允許聲明與類的實(shí)例無關(guān)的方法,即靜態(tài)方法。靜態(tài)方法不對(duì)特定實(shí)例進(jìn)行操作,在靜態(tài)方法中訪問實(shí)例會(huì)導(dǎo)致錯(cuò)誤。靜態(tài)方法通過修飾器@staticmethod定義,其聲明格式如下。@staticmethoddef靜態(tài)方法名([形參列表]):函數(shù)體靜態(tài)方法一般通過類名訪問,也可以通過實(shí)例調(diào)用。其調(diào)用格式如下。類名.靜態(tài)方法名([實(shí)參列表])311三、類方法在Python中可以聲明屬于類本身的方法,即類方法。不同于普通的實(shí)例方法,類方法不會(huì)對(duì)特定的實(shí)例進(jìn)行操作。在類方法中嘗試訪問對(duì)象實(shí)例會(huì)導(dǎo)致錯(cuò)誤。為了定義類方法,需要使用修飾器@classmethod,并將第一個(gè)形參設(shè)置為類對(duì)象本身,通常命名為cls。類方法的聲明格式如下。@classmethoddef類方法名(cls,[形參列表]):函數(shù)體類方法一般通過類名訪問,也可以通過實(shí)例調(diào)用。312其調(diào)用格式如下。類名.類方法名([實(shí)參列表])注意:盡管類方法的第一個(gè)參數(shù)被命名為cls,但在調(diào)用時(shí),用戶不需要也不能給該參數(shù)傳遞值。Python會(huì)自動(dòng)將類傳遞給這個(gè)參數(shù)。類和實(shí)例不同。在Python中,類本身也被視為對(duì)象。當(dāng)調(diào)用子類繼承自父類的類方法時(shí),傳遞給cls的是子類對(duì)象,而不是父類對(duì)象。313四、__new__()方法和__init__()方法在Python的類體中,還可以定義一些特殊的方法,如__new__()方法和__init__()方法。__new__()方法是一個(gè)類方法,在創(chuàng)建對(duì)象時(shí)被調(diào)用,它返回當(dāng)前對(duì)象的一個(gè)實(shí)例。通常情況下,不需要重載這個(gè)方法,因?yàn)镻ython會(huì)自動(dòng)處理對(duì)象的創(chuàng)建過程。__init__()方法即構(gòu)造函數(shù)(構(gòu)造方法),用于在對(duì)象創(chuàng)建完成后進(jìn)行初始化工作。該方法在對(duì)象被創(chuàng)建后立即調(diào)用,它負(fù)責(zé)初始化當(dāng)前對(duì)象的實(shí)例屬性等。該方法沒有返回值。314五、__del__()方法__del__()方法即析構(gòu)函數(shù)(析構(gòu)方法),用于實(shí)現(xiàn)銷毀類的實(shí)例所需的操作,如釋放對(duì)象占用的非托管資源(如打開的文件、網(wǎng)絡(luò)連接等)。默認(rèn)情況下,當(dāng)對(duì)象不再被使用時(shí)運(yùn)行__del__()方法。由于Python解釋器實(shí)現(xiàn)自動(dòng)垃圾回收,所以無法明確這個(gè)方法究竟在什么時(shí)候運(yùn)行。通過del語句可以強(qiáng)制銷毀一個(gè)實(shí)例,從而保證調(diào)用實(shí)例的__del__()方法。315六、私有方法和公有方法與私有屬性類似,Python約定以兩個(gè)下畫線開頭,但不以兩個(gè)下畫線結(jié)束的方法是私有的,其他為公有的。以雙下畫線開始和結(jié)束的方法是Python專有的方法。注意:不能直接訪問私有方法,但可以在其他方法中訪問。316七、方法的重載在許多程序設(shè)計(jì)語言中方法可以重載,即可以定義多個(gè)重名的方法,只要保證方法簽名是唯一的即可。方法簽名包括3個(gè)部分,即方法名、參數(shù)數(shù)量和參數(shù)類型。Python本身是動(dòng)態(tài)語言,方法的參數(shù)沒有聲明類型(在調(diào)用傳值時(shí)確定參數(shù)的類型),參數(shù)的數(shù)量由可選參數(shù)和可變參數(shù)控制,故Python對(duì)象方法不需要重載,定義一個(gè)方法即可實(shí)現(xiàn)多種調(diào)用,從而實(shí)現(xiàn)相當(dāng)于其他程序設(shè)計(jì)語言的重載功能。注意:在Python類體中定義多個(gè)重名的方法雖然不會(huì)報(bào)錯(cuò),但只有最后一個(gè)方法有效,因此建議不要定義重名的方法。任務(wù)4

認(rèn)識(shí)繼承3171.?了解派生類的使用方法。2.?了解查看繼承層次關(guān)系的方法。3.?了解類成員的繼承和重寫。4.?能正確使用繼承。任務(wù)目標(biāo)318一、派生類Python支持多重繼承,即一個(gè)派生類可以繼承多個(gè)基類。派生類的聲明格式如下。class派生類名(基類1,[基類2,…]):類體其中,派生類名后為所有基類的名稱元組。如果在類定義中沒有指定基類,則默認(rèn)其基類為object。object是所有對(duì)象的根基類,定義了公用方法的默認(rèn)實(shí)現(xiàn),如__new__()方法。相關(guān)知識(shí)319320二、查看繼承的層次關(guān)系多個(gè)類的繼承可以形成層次關(guān)系,通過類的方法mro()或類的屬性__mro__可以輸出其繼承的層次關(guān)系。三、類成員的繼承和重寫通過繼承,派生類繼承基類中除構(gòu)造方法之外的所有成員。如果在派生類中重新定義從基類繼承的方法,則在派生類中定義的方法將覆蓋從基類中繼承的方法。任務(wù)5

認(rèn)識(shí)可迭代對(duì)象——迭代器和生成器3211.?了解可迭代對(duì)象的定義。2.?了解迭代器的作用。3.?熟悉生成器函數(shù)并能正確使用。任務(wù)目標(biāo)322可循環(huán)迭代的對(duì)象稱為可迭代對(duì)象,迭代器和生成器函數(shù)是可迭代對(duì)象,Python提供了定義迭代器和生

溫馨提示

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

評(píng)論

0/150

提交評(píng)論