Python程序設(shè)計(jì)課件第7章面向?qū)ο蟪绦蛟O(shè)計(jì)_第1頁(yè)
Python程序設(shè)計(jì)課件第7章面向?qū)ο蟪绦蛟O(shè)計(jì)_第2頁(yè)
Python程序設(shè)計(jì)課件第7章面向?qū)ο蟪绦蛟O(shè)計(jì)_第3頁(yè)
Python程序設(shè)計(jì)課件第7章面向?qū)ο蟪绦蛟O(shè)計(jì)_第4頁(yè)
Python程序設(shè)計(jì)課件第7章面向?qū)ο蟪绦蛟O(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、類和對(duì)象類的繼承和多態(tài)綜合應(yīng)用案例第七章 面向?qū)ο蟪绦蛟O(shè)計(jì)參考書目Python 程序設(shè)計(jì)類和對(duì)象第七章 面向?qū)ο蟪绦蛟O(shè)計(jì)參考書目Python 程序目錄面向?qū)ο蟪绦蛟O(shè)計(jì)的3個(gè)基本特性類和對(duì)象類的繼承和多態(tài)綜合應(yīng)用案例這里說(shuō)明圖片內(nèi)容 目錄面向?qū)ο蟪绦蛟O(shè)計(jì)的3個(gè)基本特性這里說(shuō)明圖片內(nèi)容 面向?qū)ο蟪绦蛟O(shè)計(jì)的3個(gè)基本特性類是面向?qū)ο蟮膶?shí)現(xiàn)手段。面向?qū)ο笫浅绦蜷_發(fā)領(lǐng)域中的重要思想,這種思想模擬了人類認(rèn)識(shí)客觀世界的邏輯,是當(dāng)前計(jì)算機(jī)軟件工程學(xué)的主流方法。面向?qū)ο蟪绦蛟O(shè)計(jì)的3個(gè)基本特性類是面向?qū)ο蟮膶?shí)現(xiàn)手段。面向?qū)γ嫦驅(qū)ο蟪绦蛟O(shè)計(jì)的3個(gè)基本特性1 封裝性封裝(encapsulation)封裝是面向?qū)ο蟮暮诵?/p>

2、思想,將對(duì)象的屬性和行為封裝起來(lái),不需要讓外界知道具體實(shí)現(xiàn)細(xì)節(jié),這就是封裝思想。面向?qū)ο蟪绦蛟O(shè)計(jì)的3個(gè)基本特性1 封裝性封裝(encaps面向?qū)ο蟪绦蛟O(shè)計(jì)的3個(gè)基本特性2 繼承性繼承(inheritance)繼承描述的是類與類之間的關(guān)系,通過(guò)繼承,新生類可以在無(wú)需贅寫原有類的情況下,對(duì)原有類的功能進(jìn)行擴(kuò)展。汽車類普通特性與功能轎車類普通特性與功能其它特性與功能繼承面向?qū)ο蟪绦蛟O(shè)計(jì)的3個(gè)基本特性2 繼承性繼承(inherit面向?qū)ο蟪绦蛟O(shè)計(jì)的3個(gè)基本特性3 多態(tài)性多態(tài)(polymorphism)多態(tài)指同一個(gè)屬性或行為在父類及其各派生類中具有不同的語(yǔ)義。面向?qū)ο蟪绦蛟O(shè)計(jì)的3個(gè)基本特性3 多態(tài)性多態(tài)

3、(polymo類和對(duì)象從具體的事物中把共同的特征抽取出來(lái),形成一般的概念稱為“歸類”,忽略事物的非本質(zhì)特牲,關(guān)注與目標(biāo)有關(guān)的本質(zhì)特征,找出事物間的共性,抽象出一個(gè)概念模型,就是定義一個(gè)類。類(class)動(dòng)物類類和對(duì)象從具體的事物中把共同的特征抽取出來(lái),形成一般的概念稱類和對(duì)象在面向?qū)ο蟮姆椒ㄖ?,類是具有相同屬性和行為的一組對(duì)象的集合,它提供一個(gè)抽象的描述,其內(nèi)部包括屬性和方法兩個(gè)主要部分,它就像一個(gè)模具,可以用它鑄造一個(gè)個(gè)具體的鑄件。類(class)類和對(duì)象在面向?qū)ο蟮姆椒ㄖ校愂蔷哂邢嗤瑢傩院托袨榈囊唤M對(duì)象類和對(duì)象對(duì)象是現(xiàn)實(shí)世界中可描述的事物,它可以是有形的也可以是無(wú)形的,從一本書到一家圖

4、書館,從單個(gè)整數(shù)到繁雜的序列等都可以稱為對(duì)象。對(duì)象(object)類和對(duì)象對(duì)象是現(xiàn)實(shí)世界中可描述的事物,它可以是有形的也可以是類和對(duì)象對(duì)象是構(gòu)成世界的一個(gè)獨(dú)立單位,它由數(shù)據(jù)(描述事物的屬性)和作用于數(shù)據(jù)的操作(體現(xiàn)事物的行為)構(gòu)成一個(gè)獨(dú)立整體。對(duì)象(object)數(shù)據(jù)對(duì)象操作類和對(duì)象對(duì)象是構(gòu)成世界的一個(gè)獨(dú)立單位,它由數(shù)據(jù)(描述事物的屬類和對(duì)象1 類的定義和使用類中可以定義數(shù)據(jù)成員和成員函數(shù),數(shù)據(jù)成員用于描述對(duì)象特征,成員函數(shù)用于描述對(duì)象行為,其中數(shù)據(jù)成員也被稱為屬性,成員函數(shù)也被稱為方法。class 類名: 屬性名 = 屬性值 def 方法名(self): 方法體類和對(duì)象1 類的定義和使用類中

5、可以定義數(shù)據(jù)成員和成員函數(shù),數(shù)類和對(duì)象1 類的定義和使用類定義完成后不能直接使用,這就好比畫好了一張房屋設(shè)計(jì)圖紙,此圖紙只能幫助人們了解房屋的結(jié)構(gòu),但不能提供居住場(chǎng)所。為滿足居住需求,需要根據(jù)房屋設(shè)計(jì)圖紙搭建實(shí)際的房屋。同理,程序中的類需要實(shí)例化為對(duì)象才能實(shí)現(xiàn)其意義。類和對(duì)象1 類的定義和使用類定義完成后不能直接使用,這就好比類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)每個(gè)類都有一個(gè)默認(rèn)的_init_()方法。如果定義類時(shí)顯式地定義_init_()方法,則創(chuàng)建對(duì)象時(shí)Python解釋器會(huì)調(diào)用顯式定義的_init_()方法;如果定義類時(shí)沒有顯式定義_init_()方法,那么Python解釋器會(huì)調(diào)

6、用默認(rèn)的_init_()方法。類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)每個(gè)類都有一類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)_init_()方法按照參數(shù)的有無(wú)(self除外)可分為有參構(gòu)造方法和無(wú)參構(gòu)造方法。無(wú)參構(gòu)造方法無(wú)參構(gòu)造方法中可以為屬性設(shè)置初始值,此時(shí)使用該方法創(chuàng)建的所有對(duì)象都具有相同的初始值。有參構(gòu)造方法有參構(gòu)造方法中可以使用參數(shù)為屬性設(shè)置初始值,此時(shí)使用該方法創(chuàng)建的所有對(duì)象都具有不同的初始值。類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)_init類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)前面在類中定義的屬性是類屬性,可以通過(guò)對(duì)象或類進(jìn)行訪問(wèn);在構(gòu)造方法中定義的屬性是

7、實(shí)例屬性,只能通過(guò)對(duì)象進(jìn)行訪問(wèn)。類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)前面在類中定類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)定義一個(gè)類Information,在該類中顯式地定義一個(gè)帶有3個(gè)參數(shù)的_init_()方法。class Inforamtion(object): def _init_(self, name, sex): = name self.sex = sexinfomation = Inforamtion(李婉, 女)類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)定義一個(gè)類I類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)在介紹析構(gòu)方法之前,先來(lái)了解Py

8、thon的垃圾回收機(jī)制。Python中的垃圾回收主要采用的是引用計(jì)數(shù)。引用計(jì)數(shù)是一種內(nèi)存管理技術(shù),它通過(guò)引用計(jì)數(shù)器記錄所有對(duì)象的引用數(shù)量,當(dāng)對(duì)象的引用計(jì)數(shù)器數(shù)值為0時(shí),就會(huì)將該對(duì)象視為垃圾進(jìn)行回收。類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)在介紹析構(gòu)方類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)getrefcount()函數(shù)是sys模塊中用于統(tǒng)計(jì)對(duì)象引用數(shù)量的函數(shù),其返回結(jié)果通常比預(yù)期的結(jié)果大1。這是因?yàn)間etrefcount()函數(shù)也會(huì)統(tǒng)計(jì)臨時(shí)對(duì)象的引用。類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)getref類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)器數(shù)值為

9、0時(shí),就會(huì)調(diào)用_del_()方法,這個(gè)方法就是類的析構(gòu)方法。import sysclass Destruction: def _del_(self): print(對(duì)象被釋放)destruction = Destruction()print(sys.getrefcount(destruction)類和對(duì)象2 構(gòu)造函數(shù)(方法)與析構(gòu)函數(shù)(方法)當(dāng)一個(gè)對(duì)象的類和對(duì)象3 創(chuàng)建類的方法與成員訪問(wèn)1.創(chuàng)建實(shí)例方法并訪問(wèn)實(shí)例方法是指在類中定義的函數(shù)。該函數(shù)是一種在類的實(shí)例上操作的函數(shù)。同_init_()方法一樣,實(shí)例方法的第一個(gè)參數(shù)必須是self,并且必須包含一個(gè)self參數(shù)。functionName:指

10、定方法名,使用小寫字母開頭;self:必要參數(shù),類的實(shí)例,其名稱可以是self以外的單詞;parameterlist:指定除self參數(shù)以外的參數(shù),各參數(shù)間使用逗號(hào)“,”進(jìn)行分隔;functionbody:方法體,實(shí)現(xiàn)的具體功能。def functionName(self,parameterlist): functionbody類和對(duì)象3 創(chuàng)建類的方法與成員訪問(wèn)1.創(chuàng)建實(shí)例方法并訪問(wèn)實(shí)類和對(duì)象3 創(chuàng)建類的方法與成員訪問(wèn)2.創(chuàng)建數(shù)據(jù)成員(屬性)并訪問(wèn) 數(shù)據(jù)成員是指在類中定義的變量,即屬性(對(duì)象的特征)。根據(jù)定義位置,屬性(成員變量)有兩種:一種是實(shí)例屬性,另一種是類屬性(類變量)。實(shí)例屬性是在構(gòu)

11、造函數(shù)_init_(以兩個(gè)下劃線“_”開頭和結(jié)束)中定義的,定義時(shí)以self作為前綴;類屬性是在類中方法之外定義的屬性。類屬性屬于類可通過(guò)類名訪問(wèn),也可以通過(guò)對(duì)象名訪問(wèn),為類的所有實(shí)例共享。類和對(duì)象3 創(chuàng)建類的方法與成員訪問(wèn)2.創(chuàng)建數(shù)據(jù)成員(屬性)類和對(duì)象3 創(chuàng)建類的方法與成員訪問(wèn)2.創(chuàng)建數(shù)據(jù)成員(屬性)并訪問(wèn)(1)類屬性類屬性是指定義在類中,并且在函數(shù)體外的屬性。類屬性可以在類的所有實(shí)例之間共享值,也就是在所有實(shí)例化的對(duì)象中公用。類屬性既可以在類外面添加和訪問(wèn),也能在類里面添加和訪問(wèn)。添加與訪問(wèn)方式有三種:1)類外面添加對(duì)象屬性對(duì)象名.屬性名 = 值rect.width = 50rect.h

12、eight = 80類和對(duì)象3 創(chuàng)建類的方法與成員訪問(wèn)2.創(chuàng)建數(shù)據(jù)成員(屬性)類和對(duì)象3 創(chuàng)建類的方法與成員訪問(wèn)2.創(chuàng)建數(shù)據(jù)成員(屬性)并訪問(wèn)2)類外面獲取對(duì)象屬性3)類里面獲取對(duì)象屬性print(矩形寬度是, rect.width)self.屬性名類和對(duì)象3 創(chuàng)建類的方法與成員訪問(wèn)2.創(chuàng)建數(shù)據(jù)成員(屬性)類和對(duì)象3創(chuàng)建類的方法與成員訪問(wèn)2.創(chuàng)建數(shù)據(jù)成員(屬性)并訪問(wèn) 在Python中除了可以通過(guò)類名稱訪問(wèn)類屬性,還可以動(dòng)態(tài)地為類和對(duì)象添加屬性、修改類屬性。修改后的結(jié)果將作用于該類的所有實(shí)例。類屬性只能通過(guò)類對(duì)象修改,不能通過(guò)實(shí)例對(duì)象修改,如果通過(guò)實(shí)例對(duì)象修改類屬性,表示的是創(chuàng)建了一個(gè)實(shí)例屬性

13、。(2)實(shí)例屬性實(shí)例屬性是指定義在類的方法中的屬性,只作用于當(dāng)前實(shí)例中。實(shí)例的屬性只能通過(guò)實(shí)例名訪問(wèn)。如果通過(guò)類名訪問(wèn)實(shí)例屬性,將拋出異常。類和對(duì)象3創(chuàng)建類的方法與成員訪問(wèn)2.創(chuàng)建數(shù)據(jù)成員(屬性)并訪類和對(duì)象4訪問(wèn)限制:私有成員與公有成員類中定義的屬性和方法默認(rèn)為公有屬性和方法,該類的對(duì)象可以任意訪問(wèn)類的公有成員。為了契合封裝原則,保證類中的代碼不被外部代碼輕易訪問(wèn)。 Python支持將類中的成員設(shè)置為私有成員,在一定程度上限制對(duì)象對(duì)類成員的訪問(wèn)。類和對(duì)象4訪問(wèn)限制:私有成員與公有成員類中定義的屬性和方法默類和對(duì)象4訪問(wèn)限制:私有成員與公有成員定義私有成員Python通過(guò)在類成員名之前添加雙下

14、劃線(_)來(lái)限制成員的訪問(wèn)權(quán)限,語(yǔ)法格式如下:_屬性名_方法名類和對(duì)象4訪問(wèn)限制:私有成員與公有成員定義私有成員Pytho類和對(duì)象4訪問(wèn)限制:私有成員與公有成員定義私有成員例如,定義一個(gè)包含私有屬性_weight和私有方法_info()的類PersonInfo。class PersonInfo: _weight = 55 # 私有屬性 def _info(self): # 私有方法 print(f我的體重是:_weight)類和對(duì)象4訪問(wèn)限制:私有成員與公有成員定義私有成員例如,定義類和對(duì)象4訪問(wèn)限制:私有成員與公有成員私有成員的訪問(wèn)創(chuàng)建PersonInfo類的對(duì)象person,通過(guò)該對(duì)象訪問(wèn)

15、類的屬性:person = PersonInfo()person._weightAttributeError: PersonInfo object has no attribute _weight類和對(duì)象4訪問(wèn)限制:私有成員與公有成員私有成員的訪問(wèn)創(chuàng)建Pe類和對(duì)象4訪問(wèn)限制:私有成員與公有成員私有成員的訪問(wèn)注釋訪問(wèn)私有屬性的代碼,在程序中添加如下的訪問(wèn)類中私有方法的代碼:person = PersonInfo()# person._weightperson._info()AttributeError: PersonInfo object has no attribute _info類和對(duì)象4訪

16、問(wèn)限制:私有成員與公有成員私有成員的訪問(wèn)注釋訪問(wèn)類和對(duì)象4訪問(wèn)限制:私有成員與公有成員由以上展示的錯(cuò)誤信息可以判斷,對(duì)象無(wú)法直接訪問(wèn)類的私有成員。結(jié) 論 類和對(duì)象4訪問(wèn)限制:私有成員與公有成員由以上展示的錯(cuò)誤信息可類和對(duì)象4訪問(wèn)限制:私有成員與公有成員class PersonInfo: _weight = 55 # 私有屬性 def get_weight(self): print(f體重:self._weightkg)person = PersonInfo()person.get_weight()私有屬性可在公有方法中通過(guò)指代對(duì)象本身的默認(rèn)參數(shù)“self”訪問(wèn),類外部可通過(guò)公有方法間接獲取類的

17、私有屬性。類和對(duì)象4訪問(wèn)限制:私有成員與公有成員class Perso類和對(duì)象4訪問(wèn)限制:私有成員與公有成員class PersonInfo: _weight = 55 # 私有屬性 def _info(self): # 私有方法 print(f我的體重是:self._weight) def get_weight(self): print(f體重:self._weightkg) self._info()person = PersonInfo()person.get_weight()私有方法同樣在公有方法中通過(guò)參數(shù)“self”訪問(wèn)。類和對(duì)象4訪問(wèn)限制:私有成員與公有成員class Perso類和

18、對(duì)象5類代碼塊Class語(yǔ)句和for、while語(yǔ)句一樣,都是代碼塊,即定義類就是執(zhí)行代碼塊。執(zhí)行上述代碼后,會(huì)輸出“class block”。在class代碼中可以包含任何語(yǔ)句。如果這些語(yǔ)句時(shí)可以立即執(zhí)行的,那就就會(huì)立刻執(zhí)行,比如print函數(shù)。除此之外,還可以動(dòng)態(tài)向class代碼塊中添加新的成員。class MyClass:print(class block)類和對(duì)象5類代碼塊Class語(yǔ)句和for、while語(yǔ)句一樣類和對(duì)象6特殊方法:靜態(tài)方法和類方法直接定義、只比普通函數(shù)多一個(gè)self參數(shù)的方法稱為實(shí)例方法,它只能通過(guò)類實(shí)例化的對(duì)象調(diào)用。class Car: wheels = 4 #

19、屬性 def drive(self): # 實(shí)例方法 print(開車方式)類和對(duì)象6特殊方法:靜態(tài)方法和類方法直接定義、只比普通函數(shù)多類和對(duì)象6特殊方法:靜態(tài)方法和類方法類方法實(shí)例方法使用裝飾器classmethod修飾類方法的第一個(gè)參數(shù)為cls,它代表類本身實(shí)例方法的第一個(gè)參數(shù)為self,它代表對(duì)象本身即可由對(duì)象調(diào)用,亦可直接由類調(diào)用只能由對(duì)象調(diào)用可以修改類屬性無(wú)法修改類屬性類方法與實(shí)例方法有以下不同:類和對(duì)象6特殊方法:靜態(tài)方法和類方法類方法實(shí)例方法使用裝飾器類和對(duì)象6特殊方法:靜態(tài)方法和類方法類方法可以被類名或?qū)ο竺{(diào)用,其語(yǔ)法格式如下:定義類方法類名.類方法對(duì)象名.類方法 類和對(duì)象6

20、特殊方法:靜態(tài)方法和類方法類方法可以被類名或?qū)ο竺惡蛯?duì)象6特殊方法:靜態(tài)方法和類方法在實(shí)例方法中無(wú)法修改類屬性的值,但在類方法中可以修改類屬性的值。修改類屬性class Apple(object): count = 0 def add_one(self): self.count = 1 classmethod def add_two(cls): cls.count = 2 apple = Apple()apple.add_one() print(Apple.count) Apple.add_two()print(Apple.count)02類和對(duì)象6特殊方法:靜態(tài)方法和類方法在實(shí)例方法中無(wú)法

21、修改類屬類和對(duì)象6特殊方法:靜態(tài)方法和類方法靜態(tài)方法與實(shí)例方法有以下不同:靜態(tài)方法實(shí)例方法使用裝飾器staticmethod修飾方法中需要以“類名.方法/屬性名”的形式訪問(wèn)類的成員方法中需要以“self.方法/屬性名”的形式訪問(wèn)類的成員即可由對(duì)象調(diào)用,亦可直接由類調(diào)用只能由對(duì)象調(diào)用類和對(duì)象6特殊方法:靜態(tài)方法和類方法靜態(tài)方法與實(shí)例方法有以下類和對(duì)象6特殊方法:靜態(tài)方法和類方法定義一個(gè)包含屬性num與靜態(tài)方法static_method()的類Example。class Example: num = 10 # 類屬性 staticmethod # 定義靜態(tài)方法 def static_method(

22、): print(f類屬性的值為:Example.num) print(-靜態(tài)方法)類和對(duì)象6特殊方法:靜態(tài)方法和類方法定義一個(gè)包含屬性num與類和對(duì)象7單例模式在創(chuàng)建類時(shí),確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例,這個(gè)類稱為單例類,單例模式是一種對(duì)象創(chuàng)建型模式。比如:我們?nèi)粘J褂玫碾娔X上都有一個(gè)回收站,在整個(gè)操作系統(tǒng)中,回收站只能有一個(gè)實(shí)例,整個(gè)系統(tǒng)都使用這個(gè)唯一的實(shí)例,而且回收站自行提供自己的實(shí)例。因此回收站是單例模式的應(yīng)用。類和對(duì)象7單例模式在創(chuàng)建類時(shí),確保某一個(gè)類只有一個(gè)實(shí)例,而且類和對(duì)象7函數(shù)和方法的區(qū)別1)函數(shù)的分類:內(nèi)置函數(shù):python內(nèi)嵌的一些函數(shù)。遞

23、歸函數(shù):直接或間接調(diào)用函數(shù)本身。匿名函數(shù):一行代碼實(shí)現(xiàn)一個(gè)函數(shù)功能。自定義函數(shù):根據(jù)自己的需求,來(lái)進(jìn)行定義函數(shù)。03010402類和對(duì)象7函數(shù)和方法的區(qū)別1)函數(shù)的分類:內(nèi)置函數(shù):pyth類和對(duì)象7函數(shù)和方法的區(qū)別2)方法分類:類方法:通過(guò)類名的調(diào)用去操作公共模板中的屬性和方法。普通方法:直接用self調(diào)用的方法。屬性方法:property,將方法偽裝成為屬性,讓代碼看起來(lái)更合理靜態(tài)方法:不用傳入類空間、對(duì)象的方法, 作用是保證代碼的一致性,規(guī)范性,可以完全獨(dú)立類外的一個(gè)方法,但是為了代碼的一致性統(tǒng)一的放到某個(gè)模塊(py文件)中。私有方法:_函數(shù)名,只能在類中被調(diào)用的方法。特殊方法(雙下劃線方

24、法):以_init_為例,是用來(lái)封裝實(shí)例化對(duì)象的屬性,只要是實(shí)例化對(duì)象就一定會(huì)執(zhí)行_init_方法。010304050602類和對(duì)象7函數(shù)和方法的區(qū)別2)方法分類:類方法:通過(guò)類名的調(diào)類和對(duì)象7函數(shù)和方法的區(qū)別從作用域的角度來(lái)分析:(1)函數(shù)作用域:從函數(shù)調(diào)用開始至函數(shù)執(zhí)行完成,返回給調(diào)用者后,在執(zhí)行過(guò)程中開辟的空間會(huì)自動(dòng)釋放,也就是說(shuō)函數(shù)執(zhí)行完成后,函數(shù)體內(nèi)部通過(guò)賦值等方式修改變量的值不會(huì)保留,會(huì)隨著返回給調(diào)用者后,開辟的空間會(huì)自動(dòng)釋放。(2)方法作用域:通過(guò)實(shí)例化的對(duì)象進(jìn)行方法的調(diào)用,調(diào)用后開辟的空間不會(huì)釋放,也就是說(shuō)調(diào)用方法中對(duì)變量的修改值會(huì)一直保留。調(diào)用的方式不同:(1)函數(shù):通過(guò)“函

25、數(shù)名()”的方式進(jìn)行調(diào)用,直接使用類名去調(diào)用(2)方法:通過(guò)“對(duì)象.方法名”的方式進(jìn)行調(diào)用,即類實(shí)例化出來(lái)去調(diào)用類和對(duì)象7函數(shù)和方法的區(qū)別從作用域的角度來(lái)分析:(1)函數(shù)作類的繼承和多態(tài) 繼承是為代碼復(fù)用和設(shè)計(jì)復(fù)用而設(shè)計(jì)的,是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特性之一。當(dāng)我們?cè)O(shè)計(jì)一個(gè)新類時(shí),如果可以繼承一個(gè)已有的設(shè)計(jì)良好的類然后進(jìn)行二次開發(fā),無(wú)疑會(huì)大幅度減少開發(fā)工作量。類的繼承和多態(tài) 繼承是為代碼復(fù)用和設(shè)計(jì)復(fù)用而設(shè)計(jì)的,是類的繼承和多態(tài)1類的繼承Python中類與類之間具有繼承關(guān)系,其中被繼承的類稱為父類或基類,繼承的類稱為子類或派生類。子類在繼承父類時(shí),會(huì)自動(dòng)擁有父類中的方法和屬性。類的繼承和多態(tài)1類的

26、繼承Python中類與類之間具有繼承關(guān)系類的繼承和多態(tài)1 類的繼承單繼承指的是子類只繼承一個(gè)父類,其語(yǔ)法格式如下:class 子類(父類)類的繼承和多態(tài)1 類的繼承單繼承指的是子類只繼承一個(gè)父類,其類的繼承和多態(tài)1 類的繼承定義一個(gè)表示兩棲動(dòng)物的父類Amphibian和一個(gè)表示青蛙的子類Frog。class Amphibian: name = 兩棲動(dòng)物 def features(self): print(幼年用鰓呼吸) print(成年用肺兼皮膚呼吸)class Frog(Amphibian): def attr(self): print(f青蛙是) print(我會(huì)呱呱叫)

27、frog = Frog()print()frog.features()frog.attr()類的繼承和多態(tài)1 類的繼承定義一個(gè)表示兩棲動(dòng)物的父類Amph類的繼承和多態(tài)2類的多繼承多繼承指的是一個(gè)子類繼承多個(gè)父類,其語(yǔ)法格式如下:class 子類(父類A, 父類B, .):類的繼承和多態(tài)2類的多繼承多繼承指的是一個(gè)子類繼承多個(gè)父類,類的繼承和多態(tài)2類的多繼承定義English類、Math類與Student類,使Student類繼承English類與Math類。class English: def eng_know(self): print(具備英語(yǔ)知識(shí)。)class Math:

28、 def math_know(self): print(具備數(shù)學(xué)知識(shí)。)class Student(English, Math): def study(self): print(學(xué)生的任務(wù)是學(xué)習(xí)。)類的繼承和多態(tài)2類的多繼承定義English類、Math類與類的繼承和多態(tài)3方法重寫子類可以繼承父類的屬性和方法,若父類的方法不能滿足子類的要求,子類可以重寫父類的方法,以實(shí)現(xiàn)理想的功能。class Felines: def speciality(self): print(貓科動(dòng)物特長(zhǎng)是爬樹)父類定義如下:class Cat(Felines): name = 貓 def speciality(sel

29、f): print(會(huì)抓老鼠) print(會(huì)爬樹)子類定義如下:類的繼承和多態(tài)3方法重寫子類可以繼承父類的屬性和方法,若父類類的繼承和多態(tài)3方法重寫如果子類重寫了父類的方法,但仍希望調(diào)用父類中的方法,那么可以使用super()函數(shù)實(shí)現(xiàn)。super().方法名()類的繼承和多態(tài)3方法重寫如果子類重寫了父類的方法,但仍希望調(diào)類的繼承和多態(tài)4多態(tài)與多態(tài)性在Python中,多態(tài)指在不考慮對(duì)象類型的情況下使用對(duì)象。相比于強(qiáng)類型,Python更推崇“鴨子類型”。“鴨子類型”是這樣推斷的:如果一只生物走起路來(lái)像鴨子,游起泳來(lái)像鴨子,叫起來(lái)也像鴨子,那么它就可以被當(dāng)做

30、鴨子。也就是說(shuō),“鴨子類型”不關(guān)注對(duì)象的類型,而是關(guān)注對(duì)象具有的行為。類的繼承和多態(tài)4多態(tài)與多態(tài)性在Python中,多態(tài)指在不考慮類的繼承和多態(tài)4多態(tài)與多態(tài)性Python中并不需要顯式指定對(duì)象的類型,只要對(duì)象具有預(yù)期的方法和表達(dá)式操作符,就可以使用對(duì)象。class Rabbit(Animal): def move(self): print(兔子蹦蹦跳跳)class Snail(Animal): def move(self): print(蝸牛緩慢爬行)def test(obj): obj.move()Rabbit和Snail類中都有move()方法,都可以傳遞給test()函數(shù)類的繼承和多態(tài)4多態(tài)與多態(tài)性Python中并不需要顯式指定對(duì)類的繼承和多態(tài)4多態(tài)與多態(tài)性2.多態(tài)性 多態(tài)性是指具有不同功能的函數(shù)可以使用相同的函數(shù)名,這樣就可以用一個(gè)函數(shù)名調(diào)用不同內(nèi)容的函數(shù)。在面向?qū)ο蠓椒ㄖ幸话闶沁@樣表述多態(tài)性:向不同的對(duì)象發(fā)送同一條消息,不同的對(duì)象在接收時(shí)會(huì)產(chǎn)生不同的行為(即方法)。也就是說(shuō),每個(gè)對(duì)象可以用自己的方式去響應(yīng)共同的消息。所謂消息,就是調(diào)用函數(shù),不同的行為就是指不同的實(shí)現(xiàn),即執(zhí)

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論