版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2024/10/2第6章類和繼承主講人:目錄2024/10/221.類和對(duì)象2.實(shí)例屬性和類屬性3.類的方法4.構(gòu)造函數(shù)5.析構(gòu)函數(shù)6.運(yùn)算符的重載7.繼承重點(diǎn)2024/10/21.類和對(duì)象Python中使用class保留字來(lái)定義類,類名的首字母一般要大寫(xiě),例如:classMyclass(object): definfor(self): print("thisisaclass")class后面緊接著類名,即Myclass,類名通常是大寫(xiě)開(kāi)頭的單詞,緊接著是(object),表示該類是從哪個(gè)類繼承下來(lái)的。類Myclass中只有一個(gè)方法infor,類的方法至少有一個(gè)參數(shù)self,self代表將來(lái)要?jiǎng)?chuàng)建的對(duì)象本身。2024/10/21.類和對(duì)象當(dāng)class語(yǔ)句執(zhí)行時(shí),這只是賦值給對(duì)象的變量,而對(duì)象可以用任何普通表達(dá)式引用。例如,F(xiàn)irstclass是寫(xiě)在模塊文件內(nèi),而不是在交互模式下輸入的,就可將其導(dǎo)入,在類開(kāi)頭的那行可以正常地使用它的名稱。fromtextimportFirstclassclassSecondclass(Firstclass): defdisplay(self):
…
或者,其等效寫(xiě)法如下。
importtextclassSecondclass(text.Firstclass): defdisplay(self):
…2024/10/21.類和對(duì)象類與對(duì)象示例classBird():def__init__(self): self.hungry=Truedefeat(self): ifself.hungry: print('Aaaah...') self.hungry=False else: print('No,thanks!')>>>b1=Bird()>>>b1.eat()Aaaah...>>>b1.eat()No,thanks!>>>b1.eat()No,thanks!>>>b1.hungryFalse>>>b1.hungryFalse2024/10/21.類和對(duì)象類和對(duì)象是面向?qū)ο缶幊痰膬蓚€(gè)主要方面,類創(chuàng)建一個(gè)新類型,而對(duì)象是這個(gè)類的實(shí)例。這類似于上面一個(gè)類Bird(),而b1是類Bird的一個(gè)實(shí)例,也就是類的一個(gè)對(duì)象(實(shí)例)。
類的組成元素:關(guān)鍵字(類):class
類的名字:Bird
構(gòu)造函數(shù):__init__(self)
類的方法:eat(self)(b1.eat())
類的特性:hungry(b1.hungry)2024/10/21.類和對(duì)象
類與對(duì)象格式類的組成:
classClass_Name(SuperClass,…):class_variable=valuedef__init__(self,argv):statementdefclass_func(self,argv):statement
關(guān)鍵字(類):class
類的名字:Class_name
構(gòu)造函數(shù):__init__(self,argv)
類的方法:class_func(self,argv)
類的特性:class_variable
2024/10/21.類和對(duì)象
對(duì)象定義
class_object_1=Class_Name()class_object_2=Class_Name()class_object_1.class_variableclass_object_2.class_variableclass_object_1.class_func(argv)class_object_2.class_func(argv)
對(duì)象定義:class_object_1=Class_Name()
對(duì)象特性:class_object_1.class_variable
對(duì)象方法:class_object_1.class_func(argv)目錄2024/10/221.類和對(duì)象2.實(shí)例屬性和類屬性3.類的方法4.構(gòu)造函數(shù)5.析構(gòu)函數(shù)6.運(yùn)算符的重載7.繼承重點(diǎn)2024/10/22.實(shí)例屬性和類屬性屬性有兩種,一種是實(shí)例屬性,另一種是類屬性。實(shí)例屬性是在構(gòu)造函數(shù)__init__中定義的,定義時(shí)以self作為前綴類屬性是在類中方法之外定義的屬性。在主程序中(在類的的外部),實(shí)例屬性屬于實(shí)例(對(duì)象)只能通過(guò)對(duì)象名訪問(wèn);類屬性屬于類可通過(guò)類名訪問(wèn)。
在類的方法中可以調(diào)用類的其它方法,可以訪問(wèn)類屬性、對(duì)象屬性。2024/10/22.實(shí)例屬性和類屬性實(shí)例屬性和類屬性。程序:classCar:price=100000#定義類屬性
def__init__(self,c):self.color=c #定義實(shí)例屬性2024/10/22.實(shí)例屬性和類屬性#主程序car1=Car("Red")car2=Car("Blue")printcar1.color,Car.priceCar.price=110000#修改類屬性C='QQ'#增加類屬性car1.color="Yellow"#修改實(shí)例屬性printcar2.color,Car.price,Cprintcar1.color,Car.price,C程序運(yùn)行結(jié)果:Red100000Blue110000QQYellow110000QQ2024/10/22.實(shí)例屬性和類屬性如果屬性名以__(雙下劃線)開(kāi)頭則是私有屬性,否則是公有屬性。私有屬性在類外不能直接訪問(wèn)。Python提供了訪問(wèn)私有屬性的方式,可用于程序的測(cè)試和調(diào)試。對(duì)象名._類名+私有成員名classFood: def__init__(self): self.__color='red' self.price=10apple=Food()apple.price=20print(apple.price,apple._Food__color)#訪問(wèn)私有成員apple.(_)Food__color="Blue"print(apple.price,apple._Food__color)print(apple.__color) #不能直接訪問(wèn)私有屬性程序運(yùn)行結(jié)果如下。
20red20Blueprint(apple.__color) #不能直接訪問(wèn)私有屬性目錄2024/10/221.類和對(duì)象2.實(shí)例屬性和類屬性3.類的方法4.構(gòu)造函數(shù)5.析構(gòu)函數(shù)6.運(yùn)算符的重載7.繼承重點(diǎn)2024/10/23.類的方法類有3種方法:公有方法、私有方法和靜態(tài)方法。雙下劃線__開(kāi)頭則是私有方法,上一行用@staticmethod標(biāo)識(shí)的方法是靜態(tài)方法,否則是公有方法。
公有方法、私有方法都屬于對(duì)象,每個(gè)對(duì)象都有自己的公有方法和私有方法;公有方法通過(guò)對(duì)象名調(diào)用,私有方法不能通過(guò)對(duì)象名調(diào)用,只能在屬于對(duì)象的方法中通過(guò)self調(diào)用;靜態(tài)方法屬于類,靜態(tài)方法只能通過(guò)類名調(diào)用,靜態(tài)方法中不能訪問(wèn)屬于對(duì)象的成員,只能訪問(wèn)屬于類的成員。2024/10/23.類的方法公有方法、私有方法和靜態(tài)方法的定義和調(diào)用。classFruit:price=0def__init__(self):self.__color='Red' #定義和設(shè)置私有屬性colorself.__city='Kunming' #定義和設(shè)置私有屬性citydef__outputColor(self): #定義私有方法outputColorprint(self.__color) #訪問(wèn)私有屬性colordef__outputCity(self): #定義私有方法outputCityprint(self.__city) #訪問(wèn)私有屬性city2024/10/23.類的方法defoutput(self): #定義公有方法outputself.__outputColor()#調(diào)用私有方法outputColorself.__outputCity() #調(diào)用私有方法outputCity@staticmethoddefgetPrice(): #定義靜態(tài)方法getPricereturnFruit.price@staticmethoddefsetPrice(p): #定義靜態(tài)方法setPriceFruit.price=p2024/10/23.類的方法#主程序apple=Fruit()apple.output()print(Fruit.getPrice())Fruit.setPrice(9)print(Fruit.getPrice())apple.__outputColor()#是否可行?思考:能否添加公有方法,以便能通過(guò)對(duì)象名訪問(wèn)私有成員變量__color?程序運(yùn)行結(jié)果:RedKunming09目錄2024/10/221.類和對(duì)象2.實(shí)例屬性和類屬性3.類的方法4.構(gòu)造函數(shù)5.析構(gòu)函數(shù)6.運(yùn)算符的重載7.繼承重點(diǎn)2024/10/24.構(gòu)造函數(shù)類的構(gòu)造函數(shù)定義類的構(gòu)造函數(shù)的形式為:def__init__(self):
superclass.__init__(self)#未綁定超類
super(subclass,self).__init__()#調(diào)用super()statement類的構(gòu)造函數(shù)與其它普通方法不同的地方在于,當(dāng)一個(gè)對(duì)象被創(chuàng)建后,會(huì)立即調(diào)用構(gòu)造方法,就有點(diǎn)類似于程序中的init的初始化方法。如果要繼承構(gòu)造方法,可以調(diào)用未綁定的超類構(gòu)造方法,也可以用super函數(shù)調(diào)用超類構(gòu)造函數(shù)。2024/10/24.構(gòu)造函數(shù)Python在創(chuàng)建對(duì)象時(shí),首先調(diào)用特殊方法__new__()創(chuàng)建該對(duì)象,之后調(diào)用特殊方法__init__()對(duì)其進(jìn)行初始化。在實(shí)際的編程中,我們創(chuàng)建的幾乎所有Python類都只需要重新實(shí)現(xiàn)__init__()方法,因?yàn)槿绻覀儾惶峁┳约旱腳_new__()方法,Python會(huì)自動(dòng)調(diào)用object.__new__()方法。classStudent(object): def__init__(self,first='',last='',id=0): self.firstnamestr=first self.lastnamestr=last self.idint=id2024/10/24.構(gòu)造函數(shù)>>>s1=Student()>>>print(s1.firstnamestr)>>>s2=Student(last='Python',first='Hello')>>>print(s2.lastnamestr)Python這里生成了Student類的兩個(gè)實(shí)例—s1和s2。s1調(diào)用構(gòu)造函數(shù)時(shí)生成,沒(méi)有帶任何參數(shù),即Student()。生成第二個(gè)實(shí)例s2時(shí),給出了參數(shù)中的兩個(gè),即Student(last='Python',first='Hello')。目錄2024/10/221.類和對(duì)象2.實(shí)例屬性和類屬性3.類的方法4.構(gòu)造函數(shù)5.析構(gòu)函數(shù)6.運(yùn)算符的重載7.繼承重點(diǎn)2024/10/25.析構(gòu)函數(shù)Python中類的析構(gòu)函數(shù)是__del__(開(kāi)始和結(jié)束都是雙下劃線),用來(lái)釋放對(duì)象占用的資源,在Python收回對(duì)象空間之前自動(dòng)執(zhí)行。如果用戶未設(shè)計(jì)析構(gòu)函數(shù),Python將提供默認(rèn)的析構(gòu)函數(shù)。析構(gòu)函數(shù)屬于對(duì)象,每個(gè)對(duì)象都有自己的析構(gòu)函數(shù)。classCar: def__init__(self,n): self.num=nprint('編號(hào)為',self.num,'的對(duì)象出生了') def__del__(self):print('編號(hào)為',self.num,'的對(duì)象死了')2024/10/25.析構(gòu)函數(shù)car1=Car(1)car2=Car(2)delcar1delcar2程序運(yùn)行結(jié)果如下。編號(hào)為1的對(duì)象出生了編號(hào)為2的對(duì)象出生了編號(hào)為1的對(duì)象死了編號(hào)為2的對(duì)象死了目錄2024/10/221.類和對(duì)象2.實(shí)例屬性和類屬性3.類的方法4.構(gòu)造函數(shù)5.析構(gòu)函數(shù)6.運(yùn)算符的重載7.繼承重點(diǎn)2024/10/26.運(yùn)算符的重載
在Python中可通過(guò)重載運(yùn)算符來(lái)實(shí)現(xiàn)對(duì)象之間的運(yùn)算。Python把運(yùn)算符與類的方法關(guān)聯(lián)起來(lái),每個(gè)運(yùn)算符都對(duì)應(yīng)一個(gè)函數(shù)。運(yùn)算符重載就是讓用類寫(xiě)成的對(duì)象可截取并響應(yīng)用在內(nèi)置類型上的運(yùn)算(加法、切片、打印和點(diǎn)號(hào)運(yùn)算符等)。2024/10/26.運(yùn)算符的重載例如,Number類提供一個(gè)方法來(lái)攔截實(shí)例的構(gòu)造函數(shù)(__init__),此外還有一個(gè)方法捕捉減法表達(dá)式(__sub__)。這種特殊的方法可與內(nèi)置運(yùn)算相綁定。classNumber: def__init__(self,start): self.data=start def__sub__(self,other): returnNumber(self.data-other)>>>x=Number(5)>>>y=x-2>>>y.data32024/10/26.運(yùn)算符的重載重載方法舉例:1.索引和分片:__getitem__和__setitem__如果類中定義了(或繼承了)的話,則對(duì)于實(shí)例的索引運(yùn)算,會(huì)自動(dòng)調(diào)用__getitem__。當(dāng)實(shí)例x出現(xiàn)在x[i]這樣的索引運(yùn)算中,Python會(huì)調(diào)用這個(gè)實(shí)例繼承的__getitem__方法,把x作為第一個(gè)參數(shù)傳遞,并將方括號(hào)內(nèi)的索引值傳給第二個(gè)參數(shù)。例如,下面的類將返回索引值。>>>classIndex: def__getitem__(self,index): returnindex…>>>x=Index()>>>x[3]3>>>foriinrange(6): print(x[i],end='')…0123452024/10/26.運(yùn)算符的重載2.索引迭代:__getitem__for語(yǔ)句的作用是從0到更大的索引值,重復(fù)對(duì)序列進(jìn)行索引運(yùn)算,直到檢測(cè)到超出邊界的異常。__getitem__也可以是Python中一種重載迭代的方式。如果定義了這個(gè)方法,for循環(huán)每次循環(huán)時(shí)都會(huì)調(diào)用類的__getitem__。并持續(xù)搭配有更高的偏移值。>>>classStepper:def__getitem__(self,i): returnself.data[i]… >>>x=Stepper()>>>x.data='spam'>>>x[1]'p'>>>foriteminx: print(item,end='')…spam2024/10/26.運(yùn)算符的重載3.迭代器對(duì)象:__iter__和__next__
上一頁(yè)__getitem__是有效的,但它是迭代退而求其次的方法。Python所有的迭代環(huán)境會(huì)有優(yōu)先嘗試__iter__的方法,再嘗試__getitem__。從技術(shù)角度上講,迭代環(huán)境是通過(guò)iter去嘗試尋找__iter__方法來(lái)實(shí)現(xiàn),而這種方法返回一個(gè)迭代器對(duì)象。如果已經(jīng)提供了,python會(huì)重復(fù)調(diào)用迭代器對(duì)象的next()方法,直到發(fā)生StopIteration異常。如果沒(méi)有找到__iter__,python會(huì)使用__getitem__機(jī)制。2024/10/26.運(yùn)算符的重載classSquares: def__init__(self,start,stop): self.value
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年湖南永州江永縣招聘事業(yè)單位人員列入(第二批)高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年湖南永州寧遠(yuǎn)縣12345熱線話務(wù)員招聘4人歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年湖南株州茶陵云陽(yáng)國(guó)家森林公園管理局選調(diào)10人高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年湖南懷化市郵政管理局招聘財(cái)務(wù)輔助崗位1人歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年湖南常德市石門(mén)縣部分事業(yè)單位引進(jìn)人才36名歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年湖南岳陽(yáng)平江縣鄉(xiāng)鎮(zhèn)衛(wèi)生院招聘50人歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年湖南中醫(yī)藥大學(xué)科研助理崗位招聘34名歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年湖北黃石大冶市紀(jì)委監(jiān)委以錢養(yǎng)事工作人員招聘3人歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年湖北黃岡市直事業(yè)單位招聘引進(jìn)高層次人才117人歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年湖北襄陽(yáng)機(jī)場(chǎng)部分崗位招聘11人歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 針灸推拿科中藥制劑研究計(jì)劃并實(shí)施
- 三年級(jí)科學(xué)第二單元《研究土壤》作業(yè)設(shè)計(jì)
- 空間向量與立體幾何復(fù)習(xí)
- 人教版小學(xué)六年級(jí)上冊(cè)月考數(shù)學(xué)試卷(1-2單元)(9月)(二)(解析版)
- 第一次月考動(dòng)員班會(huì)堅(jiān)定目標(biāo)與勝利
- 2022新能源集控中心調(diào)試試運(yùn)行應(yīng)急預(yù)案
- 主題班會(huì)《孝親敬老-從我做起》課件
- 2023年北京市西城區(qū)高三高考一模英語(yǔ)試卷含詳解
- 光纜搶修應(yīng)急處置方案
- 工業(yè)企業(yè)標(biāo)準(zhǔn)軌距鐵路設(shè)計(jì)規(guī)范
- 城市軌道交通服務(wù)員理論知識(shí)題庫(kù)附答案
評(píng)論
0/150
提交評(píng)論