![小學(xué)Python系列少兒編程課程《第7章 神秘的類和對(duì)象》課件_第1頁(yè)](http://file4.renrendoc.com/view14/M04/3E/03/wKhkGWbm5RaAfNKiAALpGgI4DcA483.jpg)
![小學(xué)Python系列少兒編程課程《第7章 神秘的類和對(duì)象》課件_第2頁(yè)](http://file4.renrendoc.com/view14/M04/3E/03/wKhkGWbm5RaAfNKiAALpGgI4DcA4832.jpg)
![小學(xué)Python系列少兒編程課程《第7章 神秘的類和對(duì)象》課件_第3頁(yè)](http://file4.renrendoc.com/view14/M04/3E/03/wKhkGWbm5RaAfNKiAALpGgI4DcA4833.jpg)
![小學(xué)Python系列少兒編程課程《第7章 神秘的類和對(duì)象》課件_第4頁(yè)](http://file4.renrendoc.com/view14/M04/3E/03/wKhkGWbm5RaAfNKiAALpGgI4DcA4834.jpg)
![小學(xué)Python系列少兒編程課程《第7章 神秘的類和對(duì)象》課件_第5頁(yè)](http://file4.renrendoc.com/view14/M04/3E/03/wKhkGWbm5RaAfNKiAALpGgI4DcA4835.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Python少兒編程第七章神秘的類和對(duì)象目錄1.1“小海龜”的自我介紹1.2“小海龜”的畫布1.3“小海龜”的畫筆1.4多彩的圖畫1.5多彩的圖畫PART01面向?qū)ο蟮木幊淌澜缑嫦驅(qū)ο蟮木幊淌澜?傳統(tǒng)的程序設(shè)計(jì)方法被稱為面向過(guò)程的程序設(shè)計(jì)。面向過(guò)程程序設(shè)計(jì)的核心是過(guò)程,即解決問(wèn)題的步驟。面向?qū)ο蟪绦蛟O(shè)計(jì)(objectorientedprogramming,OOP)是將所有預(yù)處理的問(wèn)題抽象為對(duì)象,并將相應(yīng)的屬性和行為封裝起來(lái),以提高軟件的重用性、靈活性和擴(kuò)展性?,F(xiàn)實(shí)世界中,對(duì)象就是客觀存在的某一事物,如一個(gè)人、一輛自行車等。而面向?qū)ο蟮木幊淌澜缰?,?duì)象具有屬性和行為兩個(gè)特征,每個(gè)對(duì)象都有各自的屬性和行為。而類是對(duì)這些具有共同特征的對(duì)象的概括、歸納和抽象表達(dá)。例如,將人抽象為“人”類,它具有名字、性別等屬性,行走、吃飯等行為,那么具體的名字為“小明”“小紅”的個(gè)體就是“人”類的對(duì)象,具體關(guān)系如圖7-1所示。面向?qū)ο蟮木幊淌澜?圖7-1類和對(duì)象的關(guān)系面向?qū)ο蟪绦蛟O(shè)計(jì)思想是把事物的屬性和行為包含在類中。其中,事物的屬性作為類的變量,事物的行為作為類的方法,而對(duì)象則是類的一個(gè)實(shí)例。因此,想要?jiǎng)?chuàng)建對(duì)象,需要先定義類。PART02真實(shí)事物的抽象類的定義2.1Python中定義類的語(yǔ)法格式如下。class類名:
類體其中,class是Python的關(guān)鍵字,用于聲明類;類名必須是合法標(biāo)識(shí)符,通常是一個(gè)有意義的名稱;類體定義類的內(nèi)部實(shí)現(xiàn),一般包括變量和方法的定義。定義類時(shí)應(yīng)注意以下幾點(diǎn)。(1)類名的首字母一般需要大寫,如Car。(2)類名后必須緊跟冒號(hào)。(3)類體相對(duì)于class關(guān)鍵字必須保持一定的空格縮進(jìn)。例如,定義一個(gè)Person類,包含姓名屬性和說(shuō)話行為,可以用下面代碼實(shí)現(xiàn)。類的定義2.1classPerson: #定義Person類name='小藍(lán)' #定義姓名變量defspeak(self): #定義說(shuō)方法print('大家好!')在上述代碼中,使用class定義了一個(gè)名為Person的類,類中有一個(gè)name變量和一個(gè)speak()方法。從代碼中可以看出,方法的定義格式和函數(shù)是一樣的,主要區(qū)別在于,方法必須顯式地聲明一個(gè)self參數(shù),且須位于參數(shù)列表的開(kāi)頭。self參數(shù)將在7.2.3節(jié)中詳細(xì)介紹。創(chuàng)建對(duì)象2.2對(duì)象名=類名()Python中創(chuàng)建對(duì)象的語(yǔ)法格式如下。創(chuàng)建對(duì)象后,可以使用它來(lái)訪問(wèn)類中的變量和方法,其語(yǔ)法格式如下。對(duì)象名.變量名對(duì)象名.方法名([參數(shù)])創(chuàng)建對(duì)象2.2【例7-1】
創(chuàng)建對(duì)象,訪問(wèn)類中的變量和方法?!具\(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-2所示。【參考代碼】classPerson: #定義Person類name='小藍(lán)' #定義姓名變量defspeak(self): #定義說(shuō)方法print('大家好!')person=Person() #創(chuàng)建對(duì)象person.speak() #調(diào)用類中的方法print('我是{}'.format()) #訪問(wèn)類中的變量圖7-2例7-1程序運(yùn)行結(jié)果self參數(shù)2.3在Python中,一個(gè)類可以生成無(wú)數(shù)個(gè)對(duì)象,當(dāng)一個(gè)對(duì)象的方法被調(diào)用時(shí),對(duì)象會(huì)將自身的引用作為第一個(gè)參數(shù)(即方法的self參數(shù)),傳遞給該方法。這樣,Python就知道需要操作哪個(gè)對(duì)象的方法了。帶self參數(shù)的方法也稱作實(shí)例方法,在類的實(shí)例方法中訪問(wèn)實(shí)例變量時(shí),須以self為前綴,但在外部通過(guò)對(duì)象名調(diào)用實(shí)例方法時(shí)不需要傳遞該參數(shù)?!纠?-2】
self參數(shù)的使用?!緟⒖即a】classPerson: #定義Person類defnamed(self,name): #定義命名的方法=name #賦值defspeak(self): #定義顯示名字的方法print('我的名字是{}'.format()) #輸出名字self參數(shù)2.3【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-3所示。【參考代碼】xiaolan=Person() #創(chuàng)建對(duì)象xiaoland('小藍(lán)') #xiaolan調(diào)用named()方法xiaowu=Person() #創(chuàng)建對(duì)象xiaowud('小舞') #xiaowu調(diào)用named()方法xiaolan.speak() #xiaolan調(diào)用speak()方法xiaowu.speak() #xiaowu調(diào)用speak()方法圖7-3例7-2程序運(yùn)行結(jié)果構(gòu)造方法2.4構(gòu)造方法的固定名稱為_(kāi)_init__(),當(dāng)創(chuàng)建類的對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造方法,實(shí)現(xiàn)對(duì)象的初始化操作?!纠?-3】
構(gòu)造方法示例?!緟⒖即a】classPerson: #定義Person類#構(gòu)造方法,定義變量并賦初值def__init__(self):='小藍(lán)'self.snack='薯?xiàng)l'defeat(self): #定義方法,輸出變量print('{}喜歡的零食是{}'.format(,self.snack))xiaolan=Person() #創(chuàng)建對(duì)象xiaolan.eat() #調(diào)用eat()方法構(gòu)造方法2.4【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-4所示。圖7-4例7-3程序運(yùn)行結(jié)果【程序說(shuō)明】
在該程序中,第3~5行實(shí)現(xiàn)了__init__()方法,給Person類添加了name和snack屬性并賦初值,在eat()方法中訪問(wèn)了name和snack的值。上例中,無(wú)論創(chuàng)建多少個(gè)Person類的對(duì)象,name和snack變量的初始值都是默認(rèn)值。如果想要為不同對(duì)象初始化不同的值,可使用有參構(gòu)造方法,即在構(gòu)造方法中設(shè)置形參。創(chuàng)建對(duì)象時(shí),為不同對(duì)象傳入不同的實(shí)參,并將每個(gè)對(duì)象的變量初始化為實(shí)參的值。構(gòu)造方法2.4【例7-4】
有參構(gòu)造方法示例?!緟⒖即a】classPerson: #定義Person類#構(gòu)造方法,定義變量并賦初值def__init__(self,name,snack):=nameself.snack=snackdefeat(self): #定義方法,輸出變量print('{}喜歡的零食是{}'.format(,self.snack))xiaolan=Person('小藍(lán)','薯?xiàng)l') #創(chuàng)建對(duì)象xiaolanxiaolan.eat() #xiaolan調(diào)用eat()方法xiaowu=Person('小舞','冰激凌') #創(chuàng)建對(duì)象xiaowuxiaowu.eat() #xiaowu調(diào)用eat()方法構(gòu)造方法2.4【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-5所示。圖7-5例7-4程序運(yùn)行結(jié)果【程序說(shuō)明】在該程序中,第3~5行定義了帶參數(shù)的構(gòu)造方法,定義了兩個(gè)參數(shù)name和snack,創(chuàng)建對(duì)象時(shí),可為不同對(duì)象傳入不同的參數(shù)值。析構(gòu)方法2.5創(chuàng)建對(duì)象時(shí),Python解釋器會(huì)默認(rèn)調(diào)用構(gòu)造方法;當(dāng)需要?jiǎng)h除一個(gè)對(duì)象來(lái)釋放其所占的資源時(shí),Python解釋器會(huì)調(diào)用析構(gòu)方法。析構(gòu)方法的固定名稱為_(kāi)_del__(),程序結(jié)束時(shí)會(huì)自動(dòng)調(diào)用該方法,也可以使用del語(yǔ)句手動(dòng)調(diào)用該方法刪除對(duì)象?!纠?-5】
比較下面兩個(gè)程序,分析輸出結(jié)果?!緟⒖即a】【代碼一】classPerson():def__init__(self): #構(gòu)造方法print('---調(diào)用構(gòu)造方法創(chuàng)建對(duì)象---')def__del__(self): #析構(gòu)方法print('---調(diào)用析構(gòu)方法刪除對(duì)象---')person=Person() #創(chuàng)建對(duì)象print('---程序結(jié)束---')析構(gòu)方法2.5【參考代碼】(續(xù))【代碼二】classPerson():def__init__(self): #構(gòu)造方法print('---調(diào)用構(gòu)造方法創(chuàng)建對(duì)象---')def__del__(self): #析構(gòu)方法print('---調(diào)用析構(gòu)方法刪除對(duì)象---')person=Person() #創(chuàng)建對(duì)象delperson #刪除對(duì)象print('---程序結(jié)束---')析構(gòu)方法2.5【運(yùn)行結(jié)果】
代碼一運(yùn)行結(jié)果如圖7-6所示,代碼二運(yùn)行結(jié)果如圖7-7所示。圖7-6代碼一運(yùn)行結(jié)果
圖7-7代碼二運(yùn)行結(jié)果【程序說(shuō)明】
以上兩段代碼的區(qū)別在于:代碼二在程序結(jié)束前使用del語(yǔ)句手動(dòng)調(diào)用析構(gòu)方法刪除對(duì)象,因此,先輸出“---調(diào)用析構(gòu)方法刪除對(duì)象---”;而代碼一沒(méi)有使用del語(yǔ)句,因此,在程序結(jié)束時(shí)才調(diào)用析構(gòu)方法,后輸出“---調(diào)用析構(gòu)方法刪除對(duì)象---”。PART03類變量和實(shí)例變量類變量和實(shí)例變量3Python類中定義的變量包括兩種:類變量和實(shí)例變量,它們有以下兩點(diǎn)區(qū)別。(1)類變量是在類中所有方法外定義的;實(shí)例變量一般是指在構(gòu)造方法__init__()中定義的,在類中定義和使用時(shí)必須以self作為前綴。(2)類變量屬于類,可以通過(guò)類名或?qū)ο竺L問(wèn);而實(shí)例變量屬于實(shí)例(即對(duì)象),在主程序中(或類的外部)只能通過(guò)對(duì)象名訪問(wèn)。與很多面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言不同,Python允許在類外部動(dòng)態(tài)地為類和對(duì)象增加變
這是Python動(dòng)態(tài)類型特點(diǎn)的重要體現(xiàn)。提示類變量和實(shí)例變量3【參考代碼】classToy: #定義Toy類type='小車' #初始化類變量def__init__(self,color):self.color=color #初始化實(shí)例變量toy=Toy('紅色') #創(chuàng)建對(duì)象#訪問(wèn)類變量和實(shí)例變量并輸出print(Toy.type,toy.type,toy.color)Toy.wheelNum=4 #增加類變量toy.price=5 #增加實(shí)例變量#訪問(wèn)增加的類變量和實(shí)例變量并輸出print(Toy.wheelNum,toy.wheelNum,toy.price)類變量和實(shí)例變量3【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-8所示。圖7-8例7-6程序運(yùn)行結(jié)果【程序說(shuō)明】
Toy類中定義的type和動(dòng)態(tài)為類增加的wheelNum都為類變量,因此,它們都屬于類,可以通過(guò)類名或?qū)ο竺L問(wèn)。但構(gòu)造方法中定義的color和動(dòng)態(tài)為對(duì)象toy增加的price都為實(shí)例變量,因此,它們只能通過(guò)對(duì)象名訪問(wèn),如果用類名進(jìn)行訪問(wèn)會(huì)提示錯(cuò)誤信息。例如,在程序的末尾增加一條語(yǔ)句“print(Toy.color)”,程序運(yùn)行出錯(cuò),提示Toy對(duì)象沒(méi)有color屬性,運(yùn)行結(jié)果如圖7-9所示。類變量和實(shí)例變量3圖7-9錯(cuò)誤提示如果類中有相同名稱的類變量和實(shí)例變量,通過(guò)對(duì)象名訪問(wèn)變量時(shí)獲取的是實(shí)例變量的值,通過(guò)類名訪問(wèn)變量時(shí)獲取的是類變量的值。類變量和實(shí)例變量3【例7-7】
類中有相同名稱的類變量和實(shí)例變量示例?!緟⒖即a】classToy: #定義Toy類color='白色' #初始化類變量def__init__(self):self.color='紅色' #初始化實(shí)例變量toy=Toy() #創(chuàng)建對(duì)象print(Toy.color,toy.color) #訪問(wèn)類變量和實(shí)例變量并輸出類變量和實(shí)例變量3【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-10所示。圖7-10例7-7程序運(yùn)行結(jié)果【程序說(shuō)明】
從程序運(yùn)行結(jié)果可以看出,類變量和實(shí)例變量的名字相同,都為color,通過(guò)類名Toy訪問(wèn)color(Toy.color)時(shí)獲取的是類變量的值“白色”,而通過(guò)對(duì)象名toy訪問(wèn)color(toy.color)時(shí)獲取的是實(shí)例變量的值“紅色”。PART04面向?qū)ο缶幊痰娜筇卣鞣庋b4.1封裝是面向?qū)ο缶幊痰暮诵乃枷?,它將?duì)象的屬性和行為封裝起來(lái)(其載體是類),隱藏其實(shí)現(xiàn)細(xì)節(jié),用戶只需通過(guò)接口來(lái)操作對(duì)象。好比用戶使用計(jì)算機(jī)時(shí),通過(guò)鍵盤就可以實(shí)現(xiàn)一些功能,無(wú)須知道計(jì)算機(jī)內(nèi)部是如何工作的。具體來(lái)說(shuō),封裝有兩個(gè)層面的含義。(1)將客觀事物封裝成抽象的類,類中的變量和方法只能通過(guò)類名或?qū)ο竺印?”的方式來(lái)訪問(wèn),前面介紹的例子其實(shí)都是這一層面的封裝。(2)將類的某些變量和方法隱藏在類內(nèi)部,不允許用戶直接訪問(wèn),或者留下少量的方法供外部訪問(wèn)。下面重點(diǎn)介紹第二層面的封裝。為了更好地實(shí)現(xiàn)數(shù)據(jù)的封裝和保密性,可以將類中的變量和方法設(shè)置成私有的,然后在類中定義一個(gè)方法(也稱接口函數(shù)),在它內(nèi)部訪問(wèn)被隱藏的變量和方法,而外部可以通過(guò)接口函數(shù)進(jìn)行訪問(wèn)。在Python中,私有化變量或方法時(shí)只需在名字前加兩個(gè)下劃線“__”即可。封裝4.1【例7-8】
私有化變量和方法?!緟⒖即a】classPeople: #定義People類def__init__(self,name,age):=nameself.__age=age #定義私有變量__agedef__sayHello(self): #定義私有方法print('Hello,大家好')defgreeting(self): #定義接口函數(shù),調(diào)用私有方法self.__sayHello()defgetAge(self): #定義接口函數(shù),返回私有變量__age的值returnself.__agexiaolan=People('小藍(lán)',10) #創(chuàng)建對(duì)象xiaolan.greeting() #調(diào)用接口函數(shù)#訪問(wèn)實(shí)例變量和調(diào)用接口函數(shù)并輸出print('我叫{},今年{}歲了。'.format(,xiaolan.getAge()))封裝4.1【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-11所示。圖7-11例7-8程序運(yùn)行結(jié)果封裝4.1如果在類外部調(diào)用私有方法或訪問(wèn)私有變量,就會(huì)提示錯(cuò)誤信息。例如,在程序的末尾增加兩條語(yǔ)句“xiaolan.__sayHello()”和“print(xiaolan.__age)”,程序運(yùn)行出錯(cuò),結(jié)果如圖7-12所示。出現(xiàn)上述問(wèn)題的原因是“__sayHello()”為私有方法,類的外部無(wú)法調(diào)用類的私有方法。同理,如果程序執(zhí)行到“print(xiaolan.__age)”時(shí),也會(huì)提示類似的錯(cuò)誤信息。圖7-12錯(cuò)誤提示繼承4.21.單繼承在Python中,當(dāng)一個(gè)子類只有一個(gè)父類時(shí)稱為單繼承。定義子類的語(yǔ)法格式如下。class子類名(父類名):子類可以繼承父類的所有公有變量和公有方法,但不能繼承其私有變量和私有方法?!纠?-9】
單繼承示例。【參考代碼】classAnimal: #定義Animal類type='動(dòng)物' #定義變量typefood='食物' #定義變量fooddefeat(self): #定義方法輸出type和foodprint('{}吃{}'.format(self.type,self.food))繼承4.21.單繼承【參考代碼】(續(xù))classCat(Animal): #定義Cat類繼承Animal類pass #空語(yǔ)句cat=Cat() #創(chuàng)建對(duì)象cat.eat() #調(diào)用父類方法cat.type='貓' #修改typecat.food='魚' #修改foodcat.eat() #調(diào)用父類方法【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-13所示。圖7-13例7-9程序運(yùn)行結(jié)果【程序說(shuō)明】
上述代碼中定義了Animal類,包含type和food變量,以及eat()方法;然后定義了Cat子類繼承Animal類,不執(zhí)行任何操作;最后創(chuàng)建Cat類對(duì)象,修改父類中的變量,并調(diào)用父類中的方法。從程序的運(yùn)行結(jié)果可以看出,子類繼承了父類的變量和方法。繼承4.22.多繼承多繼承指一個(gè)子類可以有多個(gè)父類,它繼承了多個(gè)父類的特性。例如,沙發(fā)床是沙發(fā)和床的功能的組合,兒子喜歡做爸爸和媽媽喜歡做的事。多繼承可以看作是對(duì)單繼承的擴(kuò)展,其語(yǔ)法格式如下。class子類名(父類名1,父類名2……):【例7-10】
多繼承示例?!緟⒖即a】classDadLikeDo: #定義DadLikeDo類defbasketball(self): #定義打籃球方法print('打籃球')繼承4.22.多繼承【參考代碼】(續(xù))classMomLikeDo: #定義MomLikeDo類defsing(self): #定義唱歌方法print('唱歌')#定義SonLikeDo類,繼承DadLikeDo類和MomLikeDo類classSonLikeDo(DadLikeDo,MomLikeDo):defdance(self): #定義跳舞方法print('跳舞')son=SonLikeDo() #創(chuàng)建對(duì)象print('兒子喜歡做的事:')son.basketball() #調(diào)用DadLikeDo類的方法son.sing() #調(diào)用MomLikeDo類的方法son.dance() #調(diào)用SonLikeDo類的方法繼承4.22.多繼承【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-14所示。圖7-14例7-10程序運(yùn)行結(jié)果【程序說(shuō)明】
上述代碼中定義了DadLikeDo類,包含basketball()方法,以及定義了MomLikeDo類,包含sing()方法;然后定義了繼承DadLikeDo類和MomLikeDo類的子類SonLikeDo,包含dance()方法;最后創(chuàng)建SonLikeDo類的對(duì)象,分別調(diào)用basketball()、sing()和dance()方法。從程序輸出的結(jié)果可以看出,子類同時(shí)繼承了多個(gè)父類的方法。繼承4.23.方法重寫當(dāng)父類中的方法無(wú)法滿足子類需求或子類具有特有功能時(shí),可以在子類中重寫父類的方法,即子類中的方法會(huì)覆蓋父類中同名的方法,以實(shí)現(xiàn)不同于父類的功能?!纠?-11】
重寫父類的方法示例。【參考代碼】classStudent: #定義Student類name='xx' #定義變量namedefcategory(self): #定義方法category()print(+'是學(xué)生')繼承4.23.方法重寫【參考代碼】(續(xù))classPupil(Student): #定義Pupil類繼承Student類defcategory(self): #重寫category()方法print(,'是小學(xué)生')classJunior(Student): #定義Junior類繼承Student類defcategory(self): #重寫category()方法print(,'是初中生')xioalan=Pupil() #創(chuàng)建Pupil類對(duì)象='小藍(lán)' #修改namexioalan.category() #調(diào)用category()方法xiaoming=Junior() #創(chuàng)建Junior類對(duì)象='小明' #修改namexiaoming.category() #調(diào)用category()方法繼承4.23.方法重寫【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-15所示。圖7-15例7-11程序運(yùn)行結(jié)果【程序說(shuō)明】
從程序的輸出結(jié)果可以看出,在調(diào)用Pupil類和Junior類對(duì)象的category()方法時(shí),只調(diào)用了子類中重寫的方法,不會(huì)再調(diào)用父類的category()方法。如果需要在子類中調(diào)用父類的方法,可以使用內(nèi)置函數(shù)super()或通過(guò)“父類名.方法名()”來(lái)實(shí)現(xiàn)。繼承4.23.方法重寫【例7-12】
子類調(diào)用父類的方法示例?!緟⒖即a】classStudent: #定義Student類def__init__(self,name,age): #構(gòu)造方法,傳遞name和age=nameself.age=agedefshowInfo(self): #定義showInfo()方法,輸出name和ageprint('姓名:{};年齡:{}'.format(,self.age))繼承4.23.方法重寫【參考代碼】(續(xù))classPupil(Student): #定義Pupil類繼承Student類#構(gòu)造方法,傳遞name、age和sexdef__init__(self,name,age,sex):super().__init__(name,age) #調(diào)用父類構(gòu)造方法self.sex=sexdefshowInfo(self):Student.showInfo(self) #調(diào)用父類showInfo()方法print('性別:{}'.format(self.sex)) #輸出sexxiaolan=Pupil('小藍(lán)',10,'女') #創(chuàng)建對(duì)象xiaolan.showInfo() #調(diào)用showInfo()方法繼承4.23.方法重寫【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-16所示。圖7-16例7-12程序運(yùn)行結(jié)果【程序說(shuō)明】
以上代碼中定義了Student類,在該類的__init__()方法中定義了name和age變量。然后定義了繼承Student類的子類Pupil,在該類中重寫了構(gòu)造方法__init__(),使用super()函數(shù)調(diào)用父類的構(gòu)造方法,并添加了自定義變量sex,使Pupil類既擁有自定義的sex,又擁有父類的name和age;還重寫了showInfo()方法,使用父類名調(diào)用了父類的showInfo()方法輸出name和age,又輸出了sex。多態(tài)4.3在Python中,多態(tài)指的是一類事物有多種形態(tài),如一個(gè)父類有多個(gè)子類,因而多態(tài)的概念依賴于繼承。而多態(tài)性可以這樣描述:向不同的對(duì)象發(fā)送同一條消息,不同的對(duì)象在接收時(shí)會(huì)產(chǎn)生不同的行為(即方法)。也就是說(shuō),每個(gè)對(duì)象可以用自己的方式去響應(yīng)同一消息(調(diào)用函數(shù))?!纠?-13】
多態(tài)示例。【參考代碼】classPerson: #定義Person類def__init__(self,name): #構(gòu)造方法,定義name=namedefwho(self): #定義who()方法print('我是一個(gè)人,我的名字是{}'.format())多態(tài)4.3【參考代碼】(續(xù))classStudent(Person): #定義Student類,繼承Person類def__init__(self,name,score): #重寫構(gòu)造方法super().__init__(name)self.score=scoredefwho(self): #重寫who()方法print('我是一個(gè)學(xué)生,我的名字是{},我的語(yǔ)文成績(jī)是{}'.format(,self.score))classTeacher(Person): #定義Teacher類,繼承Person類def__init__(self,name,course):#重寫構(gòu)造方法super().__init__(name)self.course=coursedefwho(self): #重寫who()方法print('我是一個(gè)老師,我的名字是{},我教{}'.format(,self.course))多態(tài)4.3【參考代碼】(續(xù))defshowInfo(x): #定義函數(shù)用于接收對(duì)象x.who() #調(diào)用who()方法#創(chuàng)建對(duì)象p=Person('小藍(lán)')s=Student('小明',88)t=Teacher('唐果','語(yǔ)文')#調(diào)用函數(shù)showInfo(p)showInfo(s)showInfo(t)多態(tài)4.3【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖7-17所示。圖7-17例7-13程序運(yùn)行結(jié)果【程序說(shuō)明】
上述代碼中首先定義了Person類,包含who()方法;然后定義了繼承Person類的兩個(gè)子類Student和Teacher,分別在這兩個(gè)類中重寫了who()方法;接著定義了帶參數(shù)的sh
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個(gè)人居間協(xié)議范文(2篇)
- 2025年個(gè)人貨運(yùn)汽車租賃合同模板(2篇)
- 2025年產(chǎn)品經(jīng)銷協(xié)議標(biāo)準(zhǔn)范文(2篇)
- 2025年五年級(jí)班主任期末個(gè)人工作總結(jié)模版(2篇)
- 2025年產(chǎn)品供貨合同格式范文(2篇)
- 智慧小鎮(zhèn)用地中介合同范本
- 辦公大樓石材運(yùn)送合同模板
- 2025年度安防設(shè)備展覽會(huì)現(xiàn)場(chǎng)展位安保合同
- 婚慶服務(wù)居間合同
- 教育設(shè)施改造貸款居間合同
- 中藥審核處方的內(nèi)容(二)
- (完整)金正昆商務(wù)禮儀答案
- RB/T 101-2013能源管理體系電子信息企業(yè)認(rèn)證要求
- GB/T 4513.7-2017不定形耐火材料第7部分:預(yù)制件的測(cè)定
- GB/T 10205-2009磷酸一銨、磷酸二銨
- 公司財(cái)務(wù)制度及流程
- 深圳版初中英語(yǔ)單詞匯總
- 健康養(yǎng)生,快樂(lè)生活課件
- MDD指令附錄一 基本要求檢查表2013版
- 駱駝祥子1一24章批注
- 新部編人教版四年級(jí)下冊(cè)道德與法治全冊(cè)教案(教學(xué)設(shè)計(jì))
評(píng)論
0/150
提交評(píng)論