版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目9面向?qū)ο缶幊塘私饷嫦驅(qū)ο蟮幕靖拍?1理解類屬性與對(duì)象屬性02理解實(shí)例方法03知識(shí)目標(biāo)理解類方法與靜態(tài)方法04理解構(gòu)造方法與析構(gòu)方法05理解訪問(wèn)權(quán)限與封裝06理解類的繼承07熟悉重寫、調(diào)用父類方法的方式08理解多態(tài)的特性和實(shí)現(xiàn)方式09能力目標(biāo)能夠定義類和對(duì)象01能夠定義和使用實(shí)例方法02能夠定義和使用靜態(tài)方法、類方法03能夠定義和使用構(gòu)造方法、析構(gòu)方法04能夠借助訪問(wèn)權(quán)限與封裝實(shí)現(xiàn)權(quán)限控制05能夠使用類的繼承進(jìn)行程序設(shè)計(jì)06能夠根據(jù)需要對(duì)父類的方法進(jìn)行重寫07能夠在子類中調(diào)用父類的方法08能夠運(yùn)用多態(tài)進(jìn)行程序設(shè)計(jì)09任務(wù)提出01任務(wù)分析02知識(shí)準(zhǔn)備03任務(wù)1虛擬寵物系統(tǒng)設(shè)計(jì)任務(wù)實(shí)現(xiàn)04任務(wù)總結(jié)05任務(wù)1打印樹(shù)形圖案任務(wù)提出Part.01提出任務(wù)編寫程序,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的虛擬寵物系統(tǒng),其中包括領(lǐng)養(yǎng)寵物、給寵物喂食、修改寵物年齡、修改版本信息、退出系統(tǒng)等功能,如圖所示。任務(wù)分析Part.02任務(wù)分析1.創(chuàng)建Python程序virtual_pets_system.py。2.設(shè)計(jì)虛擬寵物系統(tǒng)的主界面。3.定義存放寵物對(duì)象的列表。4.定義系統(tǒng)入口,使用input函數(shù)接收用戶從鍵盤輸入的功能選項(xiàng)。5.定義父類動(dòng)物類,設(shè)置動(dòng)物名稱、體重等屬性,并定義設(shè)置動(dòng)物年齡、動(dòng)物發(fā)聲、投喂食物等行為的方法。本任務(wù)主要實(shí)現(xiàn)的是虛擬寵物,如貓、狗等的“飼養(yǎng)”,涉及到不同寵物及其行為的表示,因此需要通過(guò)Python中類與對(duì)象來(lái)編程實(shí)現(xiàn)。具體的任務(wù)實(shí)施分析如下:任務(wù)分析6.從動(dòng)物類繼承創(chuàng)建子類“狗”、“貓”,并依據(jù)狗和貓不同的行為特性,重寫動(dòng)物類中的各個(gè)方法。7.根據(jù)用戶的功能選擇,執(zhí)行相應(yīng)的操作并給出操作結(jié)果。如選擇“領(lǐng)養(yǎng)一只小狗”,則創(chuàng)建子類“狗”的實(shí)例對(duì)象;如選擇“給寵物喂食物”,則調(diào)用投喂食物的方法。8.運(yùn)行測(cè)試程序,檢驗(yàn)系統(tǒng)的各項(xiàng)功能。知識(shí)準(zhǔn)備Part.03對(duì)象與類概述01類的屬性02類的方法03知識(shí)準(zhǔn)備訪問(wèn)權(quán)限與封裝04類的繼承05重寫和調(diào)用父類方法06多態(tài)性07對(duì)象01類02類的定義039.1對(duì)象與類概述類的成員04對(duì)象的定義05對(duì)象的含義對(duì)象是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心。對(duì)象可以是任何事物,是現(xiàn)實(shí)世界實(shí)際存在的實(shí)體。比如:一本書、一個(gè)學(xué)生、一只動(dòng)物、一個(gè)賬戶,或者一個(gè)浮點(diǎn)數(shù)、一種變量類型乃至一種語(yǔ)言等等。在Python中一切皆是對(duì)象!對(duì)象一般由一組屬性和一組行為構(gòu)成。類的含義類是對(duì)具有相同屬性和行為對(duì)象的抽象。類也可以被理解成一種數(shù)據(jù)類型,一個(gè)類所包含的數(shù)據(jù)和方法用于描述一組對(duì)象的共同屬性和行為。類是對(duì)象的抽象,而對(duì)象是類的具體化,或者稱之為實(shí)例化。對(duì)象是根據(jù)類創(chuàng)建出來(lái)的,一個(gè)類可以創(chuàng)建多個(gè)對(duì)象。類的定義在Python中可以使用關(guān)鍵字class定義一個(gè)類,語(yǔ)法格式和示例如下:class類名:"""類說(shuō)明"""
類體語(yǔ)法格式說(shuō)明如下:類的定義以class開(kāi)頭,后面跟類名和冒號(hào)(必須為英文格式)。類名是一個(gè)標(biāo)識(shí)符,遵循Python標(biāo)識(shí)符命名規(guī)則,首字母通常大寫。類體中定義類的所有細(xì)節(jié),通常包括屬性和方法兩部分。類說(shuō)明可有可無(wú),用于對(duì)類進(jìn)行描述。類的成員在類的定義中通常包含成員變量和成員方法。其中,成員變量也稱為屬性,按照從屬關(guān)系可以分為類變量和實(shí)例變量;成員方法也稱為行為,成員方法主要有構(gòu)造方法、實(shí)例方法、靜態(tài)方法、類方法等,如下所示:類成員成員變量(屬性)成員方法(行為)類變量實(shí)例變量構(gòu)造方法實(shí)例方法靜態(tài)方法類方法對(duì)象的定義在Python中,對(duì)象的定義格式如下:語(yǔ)法格式說(shuō)明如下:objectName:對(duì)象名className:類名參數(shù)可選objectName=className([參數(shù)])定義Animal類的對(duì)象dog示例代碼如下:類屬性01對(duì)象屬性029.2類的屬性在類體中定義的變量就是屬性。屬性按所屬的對(duì)象可以分為類屬性和對(duì)象屬性:類屬性類屬性:對(duì)象屬性:是該類所擁有的屬性,屬于該類的所有實(shí)例對(duì)象。是該類的實(shí)例對(duì)象所擁有的屬性,屬于該類的某個(gè)特定實(shí)例對(duì)象。類屬性是該類所擁有的屬性,屬于該類的所有實(shí)例對(duì)象。類屬性通常在類體中初始化,然后在類定義的方法或外部代碼中,通過(guò)類名訪問(wèn)。類屬性語(yǔ)法格式:#類體內(nèi)初始化類屬性類變量名=初始值#修改類屬性的值類名.變量名=值#讀取類屬性的值類名.變量名類屬性示例代碼如下:與類屬性不同,對(duì)象屬性是類的實(shí)例對(duì)象所擁有的屬性,對(duì)象屬性僅屬于特定的實(shí)例對(duì)象。對(duì)象屬性在類的內(nèi)部,對(duì)象屬性通過(guò)實(shí)例方法中的self關(guān)鍵字定義,語(yǔ)法格式如下:#定義對(duì)象屬性變量self.屬性名=初始值其中,self是實(shí)例方法的第一個(gè)形參,代表類的當(dāng)前實(shí)例對(duì)象。對(duì)象屬性的定義與訪問(wèn),示例代碼:對(duì)象屬性在Python中,每個(gè)對(duì)象都有一個(gè)__dict__屬性,它是一個(gè)字典,用于存儲(chǔ)對(duì)象的屬性和它們的值。對(duì)象屬性__dict__屬性主要用于動(dòng)態(tài)地查看和修改對(duì)象的屬性。對(duì)于用戶自定義的對(duì)象,__dict__通常包含了在實(shí)例方法中定義的所有屬性。使用對(duì)象__dict__屬性,示例代碼如下。對(duì)象屬性訪問(wèn)不存在的對(duì)象屬性,示例代碼如下:對(duì)象屬性類屬性和對(duì)象屬性是兩種不同的屬性類型,主要區(qū)別如下:對(duì)象屬性從屬關(guān)系不同:類屬性屬于類本身,由類的所有實(shí)例對(duì)象共享,在內(nèi)存中只有一個(gè)副本;對(duì)象屬性則屬于類的某個(gè)特定實(shí)例對(duì)象。如果存在同名的類屬性和對(duì)象屬性,則兩者相互獨(dú)立、互不影響。定義的位置和方式不同:類屬性是在類中所有成員方法的外部定義的,而對(duì)象屬性則是在實(shí)例方法中以“self.屬性名”形式定義的。訪問(wèn)方式不同:類屬性是通過(guò)“類名.屬性名”形式訪問(wèn)的,而對(duì)象屬性則是通過(guò)實(shí)例對(duì)象以“對(duì)象名.屬性名”形式訪問(wèn)的。實(shí)例方法01類方法029.3類的方法內(nèi)置方法04靜態(tài)方法03實(shí)例方法在Python中,實(shí)例方法是與特定類的實(shí)例對(duì)象相關(guān)聯(lián)的方法。這些方法必須通過(guò)類的實(shí)例對(duì)象來(lái)調(diào)用,并可以訪問(wèn)和修改該實(shí)例對(duì)象的屬性和其他方法。在定義實(shí)例方法時(shí),至少需要定義一個(gè)參數(shù),并且必須以類的實(shí)例對(duì)象作為其第一參數(shù),一般以“self”命名該參數(shù)。語(yǔ)法格式為:#實(shí)例方法按如下格式定義def方法名(self,…):
方法體實(shí)例方法語(yǔ)法格式說(shuō)明如下:方法名為有效標(biāo)識(shí)符,遵循標(biāo)識(shí)符命名規(guī)則通常方法名都是小寫字母,包含多個(gè)單詞用下劃線分割里面的符號(hào)都是英文格式實(shí)例方法的聲明及調(diào)用,示例代碼如下:類方法Python中類方法是類本身?yè)碛械某蓡T方法,通常用于對(duì)類屬性進(jìn)行修改。類方法不對(duì)特定實(shí)例進(jìn)行操作,在類方法中訪問(wèn)實(shí)例屬性(即對(duì)象屬性)會(huì)導(dǎo)致錯(cuò)誤。類方法至少要包含一個(gè)參數(shù)cls,Python會(huì)自動(dòng)將類本身綁定給cls參數(shù)。定義類方法需要用到修飾器“@classmethod”,以表示其為類方法。語(yǔ)法格式如下:@classmethoddef方法名(cls,…):
方法體類方法調(diào)用類方法的方式有兩種,一種是通過(guò)類調(diào)用,一種是通過(guò)實(shí)例對(duì)象調(diào)用,語(yǔ)法格式如下:#調(diào)用類方法--方式1cls.方法名([參數(shù)])#調(diào)用類方法--方式2對(duì)象名.方法名([參數(shù)])類方法定義類屬性及類方法,示例代碼如下:靜態(tài)方法在Python中靜態(tài)方法是類的方法,但不依賴于類的實(shí)例或類的任何狀態(tài),可以在沒(méi)有創(chuàng)建實(shí)例對(duì)象的情況下調(diào)用它。靜態(tài)方法不能訪問(wèn)對(duì)象屬性、實(shí)例方法、類方法,其存在主要是為了便于使用和維護(hù)某些信息。與類方法和實(shí)例方法不同,靜態(tài)方法可以帶任意數(shù)量的參數(shù),也可以不帶任何參數(shù)。其定義需要用修飾器“@staticmethod”進(jìn)行修飾,語(yǔ)法格式如下:@staticmethoddef方法名([參數(shù)列表]):
方法體類方法調(diào)用靜態(tài)方法的方式也有兩種,分別是通過(guò)類調(diào)用或通過(guò)實(shí)例對(duì)象調(diào)用,語(yǔ)法格式如下:#調(diào)用靜態(tài)方法--方式1類名.方法名([參數(shù)])#調(diào)用靜態(tài)方法--方式2對(duì)象名.方法名([參數(shù)])定義類屬性及類方法,示例代碼如右側(cè)所示:內(nèi)置方法內(nèi)置方法通常用來(lái)完成一些特定的功能。在Python中,每定義一個(gè)類,系統(tǒng)都會(huì)自動(dòng)地為它添加一些默認(rèn)的內(nèi)置方法。這些方法由特定的操作觸發(fā),無(wú)須顯式調(diào)用,方法名通常約定以兩個(gè)下劃線開(kāi)始并以兩個(gè)下劃線結(jié)束。構(gòu)造方法和析構(gòu)方法即是兩個(gè)常用的內(nèi)置方法,它們?cè)诿嫦驅(qū)ο蟪绦蛟O(shè)計(jì)中起著重要的作用。內(nèi)置方法Python中的構(gòu)造方法關(guān)鍵要點(diǎn):特點(diǎn)1創(chuàng)建完實(shí)例后會(huì)自動(dòng)調(diào)用,無(wú)返回值定義時(shí)第一個(gè)參數(shù)為當(dāng)前實(shí)例,通常用self表示創(chuàng)建類的新實(shí)例時(shí)Python會(huì)自動(dòng)將當(dāng)前實(shí)例傳入構(gòu)造方法,因此不必在類名后的圓括號(hào)中寫入這個(gè)self參數(shù)特點(diǎn)2特點(diǎn)3默認(rèn)情況下,Python自動(dòng)建立一個(gè)沒(méi)有任何操作的__init()__方法,若用戶定義了自己的__init()__方法,將覆蓋默認(rèn)的__init()__特點(diǎn)4方法名__init()__作用執(zhí)行實(shí)例對(duì)象的初始化工作內(nèi)置方法
Python中構(gòu)造方法的應(yīng)用示例代碼如下:內(nèi)置方法還可以在構(gòu)造方法中執(zhí)行其他初始化操作,比如設(shè)置默認(rèn)值、驗(yàn)證參數(shù)的有效性等,如下案例:運(yùn)行會(huì)拋出異常:TypeError:age必須是大于等于0的整數(shù)內(nèi)置方法Python中的析構(gòu)方法關(guān)鍵要點(diǎn):特點(diǎn)1默認(rèn)情況下,當(dāng)對(duì)象不再使用時(shí)(如程序運(yùn)行結(jié)束時(shí)),在程序中創(chuàng)建的對(duì)象會(huì)被刪除,此時(shí)將自動(dòng)調(diào)用析構(gòu)方法通常可以重寫默認(rèn)的析構(gòu)方法,執(zhí)行一些特定的釋放資源的操作特點(diǎn)2方法名__del()__作用銷毀類的實(shí)例,釋放各種資源內(nèi)置方法
Python中析構(gòu)方法的應(yīng)用示例代碼如下:運(yùn)行會(huì)輸出以下內(nèi)容:訪問(wèn)權(quán)限01封裝029.4訪問(wèn)權(quán)限與封裝訪問(wèn)權(quán)限Python支持將屬性和方法設(shè)置成特定的訪問(wèn)權(quán)限,但是并沒(méi)有提供public、protected、private這些修飾符,而是使用一套約定的規(guī)則:公有權(quán)限:類中的普通屬性和方法,默認(rèn)都是公有的,可以在類的內(nèi)部、外部、子類中訪問(wèn)。公有的屬性或方法通常不以下劃線開(kāi)頭以兩個(gè)下劃線即“__”開(kāi)頭的屬性或方法為私有的,私有的屬性或方法只能在該類的內(nèi)部訪問(wèn),不能在外部及子類中訪問(wèn)私有權(quán)限:訪問(wèn)權(quán)限在Python中通常只有公有權(quán)限和私有權(quán)限,但有時(shí)可能會(huì)出現(xiàn)以一個(gè)下劃線開(kāi)頭的屬性變量,比如_name,這樣的變量通常不要隨意在類的外部訪問(wèn),這種情況類似C++或Java中的受保護(hù)權(quán)限。在類外訪問(wèn)私有權(quán)限屬性示例代碼:運(yùn)行后報(bào)錯(cuò):AttributeError:'Animal'objecthasnoattribute'__age'封裝封裝是在定義類時(shí),將一些屬性和方法隱藏在類的內(nèi)部,使其在類外無(wú)法直接訪問(wèn),只能通過(guò)指定的方式訪問(wèn)。封裝數(shù)據(jù)的主要目的是為了確保按規(guī)則訪問(wèn),保護(hù)數(shù)據(jù)。封裝的實(shí)現(xiàn)方式:把需要保護(hù)的屬性定義為私有屬性,即在屬性名的前面加上兩個(gè)下劃線添加用于設(shè)置(set)和獲取(get)屬性值的兩個(gè)方法供外界調(diào)用封裝Python中類的封裝,示例代碼如下:?jiǎn)我焕^承01多重繼承029.5類的繼承單一繼承在Python中,類的繼承允許一個(gè)類(稱為子類或派生類)繼承另一個(gè)類(稱為父類或基類)的屬性和方法。這兩個(gè)類之間的關(guān)系可以描述為“父類-子類”或“基類-派生類”或“超類-子類”。子類通過(guò)繼承可以得到父類中所有的屬性和方法,并且可以對(duì)所得到的這些屬性和方法進(jìn)行重寫和覆蓋。類的繼承是面向?qū)ο缶幊蹋∣OP)的核心特性。Python支持多重繼承,這意味著一個(gè)類可以繼承自多個(gè)父類。因此,類的繼承也可以分為單一繼承和多重繼承兩類。單一繼承單一繼承簡(jiǎn)稱單繼承,是指基于單個(gè)父類定義子類,也就是該子類有且只有一個(gè)直接父類。單繼承的語(yǔ)法格式如下:#單一繼承class子類名(父類名):
類體子類將擁有父類的所有公有屬性和所有方法,子類還可以擴(kuò)展父類的功能,或者修改從父類繼承過(guò)來(lái)的方法,以滿足特定的需要。單一繼承Python單一繼承示例代碼如下:其中Cat類繼承自Animal類。Cat類通過(guò)super().__init__()調(diào)用了Animal類的構(gòu)造函數(shù)來(lái)初始化繼承name屬性。Cat類定義了自己的age屬性和cat_method方法。多重繼承Python支持多重繼承,當(dāng)有多個(gè)父類時(shí)即為多重繼承,多重繼承簡(jiǎn)稱多繼承。多繼承的語(yǔ)法格式如下:#多重繼承class子類名(父類名1,父類名2,…,父類名n):
類體多重繼承Python多重繼承示例代碼如下:重寫父類方法01調(diào)用父類方法029.6重寫和調(diào)用父類方法重寫父類方法重寫父類方法是指在子類中重新定義從父類中繼承的方法,使其具有不同于父類的功能。語(yǔ)法格式如下:#重寫父類方法class子類名(父類名):def方法名([參數(shù)]):
新方法體需要注意的是,子類中重寫父類的方法時(shí),要求具有相同的方法名和參數(shù)列表,否則就不是重寫而是增加新的方法。重寫父類方法重寫父類方法,示例代碼如下:程序的運(yùn)行結(jié)果為:父類子類調(diào)用父類方法在某些情況下,希望在子類中保留父類的功能,此時(shí)就需要在子類中調(diào)用父類的方法。方式有兩種:需要注意的是,使用類名調(diào)用類的成員方法時(shí),Python不會(huì)為該方法的第一個(gè)參數(shù)self自動(dòng)綁定值,因此需要手動(dòng)為self參數(shù)賦值。#子類調(diào)用父類方法--方式1super().方法名()#子類調(diào)用父類方法--方式2父類名.方法名(self)調(diào)用父類方法子類中調(diào)用父類方法,示例代碼如下:程序的運(yùn)行結(jié)果為:父類父類子類重寫父類方法01調(diào)用父類方法029.6重寫和調(diào)用父類方法多態(tài)性多態(tài)是一種程序設(shè)計(jì)概念,它允許一個(gè)接口(通常是方法或函數(shù))被不同的對(duì)象以不同的方式實(shí)現(xiàn)或調(diào)用。在運(yùn)行時(shí),程序會(huì)根據(jù)不同的對(duì)象來(lái)決定調(diào)用哪個(gè)具體的方法。面向?qū)ο缶幊痰娜筇卣鳎悍庋b、繼承、多態(tài),封裝和繼承為多態(tài)的實(shí)現(xiàn)打下了基礎(chǔ)。而多態(tài)意味著同一動(dòng)作不同的對(duì)象有不同的表現(xiàn)。多態(tài)性Python中多態(tài)的實(shí)現(xiàn)有多種方式,在這里僅介紹其中最常用的方式之一:繼承時(shí)多態(tài):在繼承體系中,子類從父類繼承方法,并修改繼承的方法以適應(yīng)子類的需要,此時(shí)就構(gòu)成多態(tài)。在之后對(duì)象調(diào)用同名方法時(shí),系統(tǒng)會(huì)根據(jù)對(duì)象來(lái)判斷應(yīng)該執(zhí)行哪個(gè)方法。多態(tài)性Python中多態(tài)的實(shí)現(xiàn),示例代碼如下:在上述代碼中,定義了一個(gè)基類Animal和兩個(gè)派生類Dog和Cat,每個(gè)類都有一個(gè)speak()方法,但它們的實(shí)現(xiàn)是不同的。定義了一個(gè)函數(shù)play_sound(),將Dog或Cat對(duì)象傳遞給這個(gè)函數(shù),Python會(huì)根據(jù)實(shí)際對(duì)象的類型來(lái)決定調(diào)用哪個(gè)speak()方法。任務(wù)實(shí)現(xiàn)Part.04分析代碼01編寫代碼02任務(wù)實(shí)現(xiàn)分析代碼根據(jù)任務(wù)的設(shè)計(jì)要求,經(jīng)過(guò)分析可知,虛擬寵物系統(tǒng)主要涉及到貓和狗這兩種動(dòng)物,因此可以定義一個(gè)動(dòng)物類作為父類,在父類中設(shè)計(jì)兩者的公共屬性和方法。然后再派生出貓類和狗類,并在這兩個(gè)子類中重寫父類的一些方法,同時(shí)根據(jù)需要增加一些屬性和方法,以滿足子類的需要。分析代碼父類:子類:作為父類,表示抽象的動(dòng)物帶有類屬性和實(shí)例屬性帶有一些實(shí)例方法,部分方法只聲明不實(shí)現(xiàn)帶有類方法和靜態(tài)方法,完成特殊功能作為子類,表示具體的動(dòng)物:狗和貓繼承父類屬性,并增添特有屬性繼承父類方法,并增添特有的方法根據(jù)動(dòng)物特性,重寫父類的某些方法AnimalDogCat分析代碼系統(tǒng)主菜單為:分析代碼父類主要方法:類方法:set_version,設(shè)置版本信息靜態(tài)方法:get_version,獲取版本信息構(gòu)造方法:__init__析構(gòu)方法:__del__set_age:設(shè)置年齡get_age:獲取年齡play_sound:輸出聲音,暫不實(shí)現(xiàn),類體為空f(shuō)eed_food:投喂食物,暫不實(shí)現(xiàn),類體為空f(shuō)eed_back:寵物的反饋,暫不實(shí)現(xiàn),類體為空分析代碼子類主要方法:除從父類繼承的之外:構(gòu)造方法:__init__,調(diào)用父類__init__方法以完成初始化set_weight:設(shè)置寵物狗體重get_weight:獲取寵物狗體重set_bread:設(shè)置寵物貓品種get_bread:獲取寵物貓品種play_sound:重寫該方法-狗和貓分別輸出不同的聲音feed_food:重寫該方法-狗和貓投喂不同的食物feed_back:重寫該方法-狗和貓給出不同的反饋分析代碼流程功能主要函數(shù):show_menu:輸出系統(tǒng)主菜單create_dog:創(chuàng)建一直狗create_cat:創(chuàng)建一只貓feed_pets:給寵物喂食modify_age:修改指定寵物的名字(1)啟動(dòng)PyCharm,新建Python項(xiàng)目Chapter09,新建Python文件virtual_pets_system.py編寫代碼由于代碼較長(zhǎng),程序的全部代碼請(qǐng)見(jiàn)如下Python源代碼文件:編寫代碼定義父類Animal編寫代碼#定義父類Animal定義派生類Dog編寫代碼#定義父類Animal定義派生類Dog定義派生類Dog定義派生類Dog定義派生類Cat編寫代碼#定義父類Animal定義派生類Dog定義派生類Dog定義派生類Dog主菜單編寫代碼#定義父類Animal定義派生類Dog定義派生類Dog定義派生類Dog主菜單創(chuàng)建對(duì)象編寫代碼#定義父類Animal定義派生類Dog定義派生類Dog定義派生類Dog主菜單創(chuàng)建對(duì)象編寫代碼#定義父類Animal定義派生類Dog定義派生類Dog定義派生類Dog主菜單給寵物喂食編寫代碼#定義父類Animal定義派生類Dog定義派生類Dog定義派生類Dog主菜單修改寵物名字編寫代碼#定義父類Animal定義派生類Dog定義派生類Dog定義派生類Dog主菜單系統(tǒng)入口編寫代碼#定義父類Animal定義派生類Dog定義派生類Dog定義派生類Dog主菜單任務(wù)總結(jié)Part.05通過(guò)本任務(wù)的學(xué)習(xí),全面的了解了Python面向?qū)ο缶幊痰幕靖拍?,掌握了如何運(yùn)用面向?qū)ο缶幊痰乃枷牒头椒ㄈゾ帉慞ython程序。在進(jìn)行面向?qū)ο缶幊虝r(shí),為了編寫更清晰、更可維護(hù)的代碼,需要注意以下幾個(gè)方面:明確類和對(duì)象的關(guān)系:類是對(duì)象的模板,定義了對(duì)象的屬性和方法。對(duì)象是根據(jù)類創(chuàng)建的具體實(shí)例,具有類定義的屬性和方法合理設(shè)計(jì)類:避免創(chuàng)建過(guò)于復(fù)雜的類,盡量遵循單一職責(zé)原則,即一個(gè)類應(yīng)該只負(fù)責(zé)一個(gè)功能領(lǐng)域中的相應(yīng)職責(zé),降低類的復(fù)雜性,提高類的可讀性和可維護(hù)性使用有意義的名稱:為類、方法、屬性和變量選擇描述性強(qiáng)、易于理解的名稱。遵循Python的命名規(guī)范,例如使用小寫字母和下劃線分隔單詞。封裝數(shù)據(jù):通過(guò)將數(shù)據(jù)和方法封裝在類中,實(shí)現(xiàn)數(shù)據(jù)隱藏和封裝,以提高代碼的安全性和可維護(hù)性??梢允褂迷L問(wèn)器(get)和修改器(set)方法來(lái)控制對(duì)私有屬性的訪問(wèn)和修改繼承與多態(tài):合理使用繼承來(lái)創(chuàng)建具有層次結(jié)構(gòu)的類,實(shí)現(xiàn)代碼重用和擴(kuò)展性。但同時(shí)也要注意避免過(guò)度繼承,以免導(dǎo)致類結(jié)構(gòu)混亂和代碼難以維護(hù)。重寫與覆蓋方法:在子類中重寫父類的方法時(shí),要確保理解父類方法的用途和行為。避免無(wú)意地覆蓋父類的重要方法,這可能導(dǎo)致代碼出錯(cuò)或功能失效。異常處理:在類的方法中,對(duì)于可能引發(fā)異常的代碼塊,應(yīng)使用try-except語(yǔ)句進(jìn)行異常處理。根據(jù)需要,也可以自定義異常來(lái)處理特定的錯(cuò)誤情況。測(cè)試與調(diào)試:應(yīng)當(dāng)為類和方法進(jìn)行測(cè)試,以確保它們的正確性和可靠性。可以使用調(diào)試工具來(lái)處理代碼中的錯(cuò)誤。使用文檔說(shuō)明:為類、方法和模塊編寫文檔說(shuō)明,以便其他人了解代碼的功能和用法項(xiàng)目10異常處理了解Python語(yǔ)言中異常的定義01了解Python常見(jiàn)內(nèi)置異常類02認(rèn)識(shí)Python異常信息的含義03知識(shí)目標(biāo)熟悉Python語(yǔ)言的異常處理語(yǔ)句04熟悉Python語(yǔ)言中主動(dòng)拋出異常的方法05熟悉Python語(yǔ)言自定義異常類的語(yǔ)法06能夠編寫語(yǔ)句引發(fā)特定異常01能夠熟練分析異常消息并找出異常原因和異常位置02能夠編寫帶有異常處理功能的程序03能力目標(biāo)能夠按條件主動(dòng)拋出異常04能夠按功能需求自定義異常05任務(wù)提出01任務(wù)分析02知識(shí)準(zhǔn)備03任務(wù)1密碼復(fù)雜度檢查任務(wù)實(shí)現(xiàn)04任務(wù)總結(jié)05任務(wù)1打印樹(shù)形圖案任務(wù)提出Part.01提出任務(wù)
在用戶注冊(cè)模塊中,對(duì)用戶輸入的密碼進(jìn)行復(fù)雜度檢查,如果密碼滿足復(fù)雜度要求,則允許用戶注冊(cè);否則視為發(fā)生異常情況,提示用戶密碼不符合復(fù)雜度要求,并要求用戶重新設(shè)置密碼。編寫Python程序,通過(guò)異常捕獲語(yǔ)句實(shí)現(xiàn)檢測(cè)密碼復(fù)雜度是否符合要求的功能,并處理該異常。任務(wù)分析Part.02任務(wù)分析1.創(chuàng)建Python程序文件pwdcheck.py。2.以一般性、常見(jiàn)性為標(biāo)準(zhǔn),明確一個(gè)密碼復(fù)雜度規(guī)則。3.設(shè)計(jì)算法,檢驗(yàn)密碼字符串是否滿足密碼復(fù)雜度規(guī)則。4.定義一個(gè)適當(dāng)?shù)漠惓n愋停员阌谠诿艽a不滿足復(fù)雜度規(guī)則時(shí),拋出異常。5.捕獲異常并處理異常情況。6.運(yùn)行測(cè)試程序,確認(rèn)異常情況是否被捕獲。本任務(wù)主要實(shí)現(xiàn)的是密碼復(fù)雜度的檢查,根據(jù)密碼復(fù)雜度的規(guī)則要求,對(duì)不符合要求的密碼,主動(dòng)拋出異常進(jìn)行專門處理,具體任務(wù)實(shí)施分析如下:知識(shí)準(zhǔn)備Part.03認(rèn)識(shí)異常01處理異常02異常的拋出和自定義異常類03知識(shí)準(zhǔn)備異常概述01常見(jiàn)異常類02異常類繼承關(guān)系0310.1認(rèn)識(shí)異常所謂異常是指Python程序執(zhí)行過(guò)程中出現(xiàn)無(wú)法正常處理程序的情況。引發(fā)異常有各種各樣的原因,例如程序語(yǔ)法錯(cuò)誤、計(jì)算錯(cuò)誤、命名錯(cuò)誤等,另外也有根據(jù)程序功能設(shè)計(jì)而主動(dòng)拋出的異常。異常概述在Python中定義了異常類,每當(dāng)發(fā)生異常時(shí),都會(huì)創(chuàng)建一個(gè)異常對(duì)象。如果這個(gè)異常對(duì)象沒(méi)有被處理和捕捉,程序就會(huì)終止執(zhí)行,并回溯(Traceback)顯示異常報(bào)告。異常概述回溯產(chǎn)生異常的代碼位置異常類型:“除零錯(cuò)”異常描述:“除數(shù)為零”
SyntaxError異常常見(jiàn)異常類NameError異常常見(jiàn)異常類
TypeError異常常見(jiàn)異常類KeyError異常常見(jiàn)異常類IndexError異常常見(jiàn)異常類ValueError異常常見(jiàn)異常類常見(jiàn)異常類異常類說(shuō)明異常類說(shuō)明BaseException所有異常的基類NameError未聲明/初始化對(duì)象(沒(méi)有屬性)SystemExit解釋器請(qǐng)求退出UnboundLocalError訪問(wèn)未初始化的本地變量KeyboardInterrupt用戶中斷執(zhí)行ReferenceError引用錯(cuò)誤GeneratorExit生成器發(fā)生異常通知退出RuntimeError一般的運(yùn)行時(shí)錯(cuò)誤Exception常規(guī)異常的基類NotImplementedError尚未實(shí)現(xiàn)的方法StopIteration迭代器沒(méi)有更多的值SyntaxErrorPython語(yǔ)法錯(cuò)誤StandardError所有內(nèi)建標(biāo)準(zhǔn)異?;怚ndentationError縮進(jìn)錯(cuò)誤ArithmeticError所有數(shù)值計(jì)算錯(cuò)誤基類TabErrorTab和空格混用FloatingPointError浮點(diǎn)計(jì)算錯(cuò)誤SystemError一般的解釋器系統(tǒng)錯(cuò)誤常見(jiàn)異常類異常類說(shuō)明異常類說(shuō)明OverflowError數(shù)值運(yùn)算超出最大限制TypeError對(duì)類型無(wú)效的操作ZeroDivisionError除(或取模)零ValueError傳入無(wú)效的參數(shù)AssertionError斷言語(yǔ)句失敗UnicodeErrorUnicode相關(guān)的錯(cuò)誤AttributeError對(duì)象沒(méi)有這個(gè)屬性UnicodeDecodeErrorUnicode解碼時(shí)的錯(cuò)誤EOFErrorEOF標(biāo)記錯(cuò)誤UnicodeEncodeErrorUnicode編碼時(shí)錯(cuò)誤EnvironmentError操作系統(tǒng)錯(cuò)誤的基類UnicodeTranslateErrorUnicode轉(zhuǎn)換時(shí)錯(cuò)誤IOError輸入/輸出操作失敗Warning警告的基類OSError操作系統(tǒng)錯(cuò)誤DeprecationWarning關(guān)于被棄用的特征的警告常見(jiàn)異常類異常類說(shuō)明異常類說(shuō)明OverflowWarning溢出警告FutureWarning將來(lái)語(yǔ)義會(huì)有改變的警告ImportError導(dǎo)入模塊/對(duì)象失敗WindowsError系統(tǒng)調(diào)用失敗LookupError無(wú)效數(shù)據(jù)查詢的基類PendingDeprecationWarning關(guān)于特性將會(huì)被廢棄的警告IndexError序列中沒(méi)有此索引(index)RuntimeWarning可疑的運(yùn)行時(shí)行為警告KeyError映射中沒(méi)有這個(gè)鍵SyntaxWarning可疑的語(yǔ)法警告MemoryError內(nèi)存溢出錯(cuò)誤UserWarning用戶代碼生成的警告Python定義了一個(gè)名為BaseException的基類,用于概括所有的異常種類,其子類包括SystemExit、KeyboardInterrupt、GeneratorExit和Exception。其中前三個(gè)是系統(tǒng)級(jí)異常,其它異常(如Python內(nèi)置常見(jiàn)異常、用戶自定義異常),都從Exception或其子類派生。異常類繼承關(guān)系try-except語(yǔ)句01else語(yǔ)句和finally語(yǔ)句0210.2處理異常在Python中,異常處理可以通過(guò)try-except語(yǔ)句來(lái)實(shí)現(xiàn)。當(dāng)你認(rèn)為程序可能發(fā)生錯(cuò)誤時(shí),可以使用try來(lái)嘗試運(yùn)行代碼,并通過(guò)except來(lái)告訴程序如果引發(fā)了異常該怎么辦。try-except語(yǔ)句try:語(yǔ)句塊0#可能引發(fā)異常的操作except[異常類型]:語(yǔ)句塊1#發(fā)生異常時(shí)執(zhí)行的操作try語(yǔ)句塊0except語(yǔ)句塊1try語(yǔ)句塊0過(guò)程中發(fā)生異常yesnotry-except語(yǔ)句無(wú)異常除零異常其他異常處理異常類型:“除零錯(cuò)”try-except語(yǔ)句無(wú)異常除零異常不區(qū)分異常類型數(shù)值異常……多分支except語(yǔ)句try-except語(yǔ)句try:
語(yǔ)句塊0#可能引發(fā)異常的操作except異常類型1:
語(yǔ)句塊1#發(fā)生異常1時(shí)執(zhí)行的處理動(dòng)作except異常類型2:
語(yǔ)句塊2#發(fā)生異常2時(shí)執(zhí)行的處理動(dòng)作……except:
語(yǔ)句塊n#其它未定義的異常處理動(dòng)作多分支except語(yǔ)句try-except語(yǔ)句try-except語(yǔ)句無(wú)異常除零異常分頭處理各類異常數(shù)值異常其他異?!赑ython的異常處理中,如果有語(yǔ)句依賴于try語(yǔ)句的成功執(zhí)行才能繼續(xù)執(zhí)行,那么放在else代碼塊中執(zhí)行。無(wú)論出現(xiàn)異常處理還是正常執(zhí)行都要執(zhí)行的清理語(yǔ)句放在finally代碼塊中執(zhí)行,通常是一些收尾的工作,如釋放對(duì)象等。else語(yǔ)句和finally語(yǔ)句try:語(yǔ)句塊0#可能引發(fā)異常的操作except:語(yǔ)句塊1#發(fā)生異常時(shí)執(zhí)行的操作else:語(yǔ)句塊2#依賴try語(yǔ)句塊執(zhí)行的操作finally:語(yǔ)句塊3#收尾操作except語(yǔ)句和finally語(yǔ)句try語(yǔ)句塊except語(yǔ)句塊else語(yǔ)句塊finally語(yǔ)句塊try語(yǔ)句塊是否發(fā)生異常yesnoexcept語(yǔ)句和finally語(yǔ)句有異常無(wú)異常raise主動(dòng)拋出異常01assert聲明斷言02自定義異常類0310.3異常的拋出和自定義異常類有時(shí)候底層程序捕獲到了異常,但暫時(shí)不想在當(dāng)前層次做出異常處理,此時(shí)也可以主動(dòng)拋出異常,讓其上層的調(diào)用者進(jìn)行處理。除了系統(tǒng)中
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人與銀行2024年度借款合同3篇
- 專業(yè)吊車作業(yè)協(xié)議模板2024版
- 2024版產(chǎn)品標(biāo)準(zhǔn)化認(rèn)證協(xié)議文件版B版
- 2024中美農(nóng)產(chǎn)品加工與出口合作協(xié)議范文3篇
- 2024機(jī)器租賃協(xié)議書
- 搶占春節(jié)外賣市場(chǎng)
- 2024年度地產(chǎn)公司房地產(chǎn)廣告效果評(píng)估與優(yōu)化委托代理協(xié)議3篇
- 2024年股權(quán)質(zhì)押擔(dān)保協(xié)議標(biāo)準(zhǔn)格式版B版
- 解讀現(xiàn)代小說(shuō)奧秘
- 2024年貨款分期償還買賣約定
- 《汽車驅(qū)動(dòng)橋》汽車標(biāo)準(zhǔn)
- 投資的本質(zhì):巴菲特的12個(gè)投資宗旨
- 護(hù)欄和扶手制作與安裝工程檢驗(yàn)批質(zhì)量驗(yàn)收記錄
- 醫(yī)院文化建設(shè)與員工凝聚力提升
- 食堂安全操作規(guī)范培訓(xùn)課件(48張)
- 水庫(kù)引調(diào)水工程項(xiàng)目可行性研究報(bào)告
- 中藥飲片行業(yè)招商策劃
- 乳頭混淆介紹演示培訓(xùn)課件
- 胸腔積液引流的護(hù)理查房
- (完整文本版)河南2016定額計(jì)算規(guī)則
- 小升初個(gè)人簡(jiǎn)歷模板下載
評(píng)論
0/150
提交評(píng)論