第8章-PythonPytho程序設(shè)計(jì)基礎(chǔ)教程-面向?qū)ο缶幊蘰pt課件_第1頁(yè)
第8章-PythonPytho程序設(shè)計(jì)基礎(chǔ)教程-面向?qū)ο缶幊蘰pt課件_第2頁(yè)
第8章-PythonPytho程序設(shè)計(jì)基礎(chǔ)教程-面向?qū)ο缶幊蘰pt課件_第3頁(yè)
第8章-PythonPytho程序設(shè)計(jì)基礎(chǔ)教程-面向?qū)ο缶幊蘰pt課件_第4頁(yè)
第8章-PythonPytho程序設(shè)計(jì)基礎(chǔ)教程-面向?qū)ο缶幊蘰pt課件_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2018.2,Python語(yǔ)言程序設(shè)計(jì),南京郵電大學(xué)計(jì)算機(jī)學(xué)院,第8章 面向?qū)ο缶幊?學(xué)習(xí)目標(biāo),掌握定義類(lèi)的方法 掌握創(chuàng)建和使用對(duì)象的方法 掌握類(lèi)的繼承的概念和使用方法,3,8.1 類(lèi)和對(duì)象,面向?qū)ο缶幊淌悄M人類(lèi)認(rèn)識(shí)事物的方式的編程方法,是最有效的編程方法之一。人類(lèi)通過(guò)將事物進(jìn)行分類(lèi)來(lái)認(rèn)識(shí)世界,比如,人類(lèi)將自然界中的事物分類(lèi)生物和非生物,又將生物分為動(dòng)物、植物、微生物,又將動(dòng)物分為有脊椎動(dòng)物和無(wú)脊椎動(dòng)物,繼而又分為哺乳類(lèi)、鳥(niǎo)類(lèi)、魚(yú)類(lèi)、爬行類(lèi)等,哺乳類(lèi)又分為貓、狗、牛、羊等。每一個(gè)類(lèi)的個(gè)體都具有一些共同的屬性,在面向?qū)ο缶幊讨校瑐€(gè)體被稱(chēng)為對(duì)象,又稱(chēng)為實(shí)例。在本章的學(xué)習(xí)中,類(lèi)、對(duì)象、實(shí)例是三個(gè)常

2、用的術(shù)語(yǔ),4,Person類(lèi)的定義和實(shí)例化,接下來(lái)我們來(lái)定義人的類(lèi)Person類(lèi),人有名字(name)、性別(gender)、體重(weight)等屬性,根據(jù)這個(gè)說(shuō)明,我們可以定義Person類(lèi)并創(chuàng)建Person對(duì)象,如以下代碼所示,5,代碼塊1:類(lèi)的定義 class Person: def _init_(self): =韓信 self.gender=男 self.weight=70 print(An instance created,代碼塊2:類(lèi)的實(shí)例化 p1=Person() print() print(p1.gender) print(p1.weight,

3、代碼塊1定義了Person類(lèi),說(shuō)明如下: class是定義類(lèi)的關(guān)鍵字,Person是類(lèi)名,在Python定義類(lèi)的格式是“class 類(lèi)名”,這是一個(gè)固定格式。 這個(gè)類(lèi)中只有一個(gè)函數(shù),類(lèi)中的函數(shù)也稱(chēng)為“方法”,該方法的名稱(chēng)為_(kāi)init_,前面學(xué)到的有關(guān)函數(shù)的一切都適用于方法,唯一重要的差別是調(diào)用方法的方式。_init_()不是普通方法,是一個(gè)特殊的方法,其作用是:每當(dāng)你根據(jù)Person 類(lèi)創(chuàng)建新實(shí)例時(shí),Python都會(huì)自動(dòng)運(yùn)行它。在這個(gè)方法的名稱(chēng)中,開(kāi)頭和末尾各有兩個(gè)下劃線(xiàn),這是一種約定,旨在與普通方法進(jìn)行區(qū)分,6,在_init_()方法的定義中,形參self 必不可少,還必須位于其他形參的前面

4、。為何必須在方法定義中包含形參self 呢?因?yàn)镻ython調(diào)用這個(gè)_init_() 方法來(lái)創(chuàng)建Dog 實(shí)例時(shí),將自動(dòng)傳入實(shí)參self ,每個(gè)與類(lèi)相關(guān)聯(lián)的方法調(diào)用都自動(dòng)傳遞實(shí)參self,讓實(shí)例能夠訪(fǎng)問(wèn)類(lèi)中的屬性和方法。我們創(chuàng)建Dog 實(shí)例時(shí),Python將調(diào)用Person 類(lèi)的方法_init_() ,self 會(huì)自動(dòng)傳遞,因此我們不需要傳遞它。 _int_()方法中有三條賦值語(yǔ)句,定義了三個(gè)變量name、gender和weight,這三個(gè)變量都有前綴self。以self 為前綴的變量都可供類(lèi)中的所有方法使用,我們還可以通過(guò)類(lèi)的任何實(shí)例來(lái)訪(fǎng)問(wèn)這些變量。=張三將變量name賦值為

5、“韓信”,然后該變量被關(guān)聯(lián)到當(dāng)前創(chuàng)建的實(shí)例。self.gender=男和self.weight=70的作用與此類(lèi)似。像這樣帶有前綴self的、可通過(guò)實(shí)例訪(fǎng)問(wèn)的變量稱(chēng)為屬性,7,代碼塊2緊接在類(lèi)Person的定義語(yǔ)句后面,是使用類(lèi)Person創(chuàng)建對(duì)象的代碼,創(chuàng)建了兩個(gè)名為p1和p2的Person對(duì)象,也稱(chēng)為Person實(shí)例。代碼塊2的解釋如下: 使用Person()創(chuàng)建一個(gè)對(duì)象,并賦值給p1對(duì)象變量,p1是這個(gè)對(duì)象的對(duì)象名,在創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用Person類(lèi)的_init_()方法。 使用“.”號(hào)訪(fǎng)問(wèn)p1的屬性,包括name、gender、weight,“.”符號(hào)是訪(fǎng)問(wèn)對(duì)象的屬性和方法的特殊符號(hào),

6、8,Person類(lèi)的完整定義,9,class Person: def _init_(self,name,gender,weight): =name self.gender=gender self.weight=weight print(A person named %s is created % ) def eat(self,food): self.weight=self.weight+food print(%s eat %s food, and my weight is %d % (,food, self.weight) def run(

7、self): self.weight=self.weight-1 print(%s runned, and my weight is %d % (,self.weight) def say(self): print(My name is %s % (,該代碼重新定義了Person類(lèi),與上一節(jié)中定義的Person類(lèi)不同的點(diǎn)如下: _init_()方法擁有除self外的三個(gè)參數(shù):name、gender、weight,分別賦值給、self.gener、self.weight。在創(chuàng)建Person對(duì)象的時(shí)候可以通過(guò)傳不同的值創(chuàng)建不同的對(duì)象,如在代碼塊

8、4中,通過(guò)p1=Person(韓信,男,70),創(chuàng)建一個(gè)名為韓信,男性,體重70的Person對(duì)象,通過(guò)p2=Person(王昭君,女,50)創(chuàng)建一個(gè)名為王昭君,女性,體重50的Person對(duì)象。 定義了eat()方法,該方法的參數(shù)是self和food:self表示當(dāng)前調(diào)用eat()的對(duì)象,food是一個(gè)數(shù)字類(lèi)型參數(shù),表示吃進(jìn)去的食物重量,通過(guò)self.weight=self.weight+food使得調(diào)用eat()方法的Person對(duì)象體重增加,如p1.eat(2)表示Person對(duì)象p1的體重增加2,同時(shí)顯示信息,10,定義了run()方法,該方法只有一個(gè)參數(shù)self,通過(guò)self.wei

9、ght=self.weight-1使得調(diào)用run()的對(duì)象體重減1,如p1.run(),表示Person對(duì)象p1通過(guò)跑步鍛煉體重降低了1,同時(shí)顯示信息。 定義了say()方法,該方法只有一個(gè)參數(shù)self,通過(guò)print(My name is %s % ()語(yǔ)句自我介紹,如p2.say(),輸出“王昭君”,自我介紹。 代碼塊4創(chuàng)建了兩個(gè)不同的Person對(duì)象,分別是p1和p2,分別調(diào)用他們的eat()、run()、say()方法,11,對(duì)象屬性的默認(rèn)值設(shè)置,可以為屬性在_init_()方法中設(shè)置默認(rèn)值,代碼如下,12, 例 8 3在類(lèi)的定義中加入初始化代碼 def _init_

10、(self, name, gender=男, weight=70): self._name=name self.gender =gender self.weight=weight print(A person named %s is created % self._name,對(duì)象屬性的修改,13, 例 84屬性值的添加、修改與刪除示例 p1=Person(安琪拉,女,45) p1.height=170 p1.weight=46 print(p1.height, p1.weight) del p1.height print(p1.height, p1.weight,其中: p1.height=7

11、0為對(duì)象p1添加了一個(gè)名為height的屬性并賦值為70,height屬性在Person類(lèi)中沒(méi)有定義,只在p1對(duì)象中存在。 p1.weight=46將對(duì)象p1的weight屬性的值修改為46。 del p1.height刪除對(duì)象p1的height屬性,14,私有屬性和私有方法,15, 例 85私有屬性的使用示例 class Person: def _init_(self,name,gender=男,weight=70): self._name=name self.gender=gender self._weight=weight print(A person named %s is creat

12、ed % self._name) def eat(self,food): self._setWeight(self._weight+food) print(%s eat %s food, and my weight is %d % (self._name,food, self._weight) def run(self): self._weight=self._weight-1 print(%s runned, and my weight is %d % (self._name,self._weight) def say(self): print(My name is %s % (self._

13、name) def _setWeight(self, weight): self._weight=weight,以上代碼定義了兩個(gè)私有屬性_name和_weight,一個(gè)私有方法_setWeight(),“_”和“_”的不同之處在于: 單下劃線(xiàn)“_”開(kāi)頭:只是告訴別人這是私有屬性,外部依然可以訪(fǎng)問(wèn)更改,所以p4._name可以正常訪(fǎng)問(wèn); 雙下劃線(xiàn)“_”開(kāi)頭:比如_weight屬性不可通過(guò)p4._weight來(lái)訪(fǎng)問(wèn)或者更改,p4._setWeight(80)不可以調(diào)用,但是可以在類(lèi)內(nèi)部的方法調(diào)用,比如eat()方法調(diào)用了_setWeight()方法,run()方法修改了_weight屬性,16,

14、類(lèi)屬性,17, 例 86類(lèi)屬性的使用示例 #代碼塊7:類(lèi)的定義 class Person: count=0 def _init_(self,name,gender=男,weight=70): self._name=name self.gender=gender self._weight=weight Person.count=Person.count+1 print(A person named %s is created % self._name,8.2. 類(lèi)的繼承,面向?qū)ο蟮木幊處?lái)的主要好處之一是代碼的重用,實(shí)現(xiàn)這種重用的方法之一是通過(guò)繼承機(jī)制。一個(gè)類(lèi)繼承另一個(gè)類(lèi)時(shí),它將自動(dòng)獲得另一個(gè)類(lèi)

15、的所有屬性和方法;原有的類(lèi)稱(chēng)為父類(lèi),而新類(lèi)稱(chēng)為子類(lèi)。子類(lèi)繼承了其父類(lèi)的所有屬性和方法,同時(shí)還可以定義自己的屬性和方法。繼承完全可以理解成類(lèi)之間的類(lèi)型和子類(lèi)型關(guān)系,18,一個(gè)簡(jiǎn)單的繼承例子,19,class Person: def _init_(self,name,gender=男,weight=70): =name self.gender=gender self.weight=weight print(A person named %s is created % ) def say(self): print(My name is %s % (self.nam

16、e) class Teacher(Person): def teach(self, lesson): print(%s teachs %s % (,lesson) class Student(Person): def study(self, lesson): print(%s studies %s % (,lesson,關(guān)于以上代碼的說(shuō)明如下: 定義了三個(gè)類(lèi):Person類(lèi)、Teacher類(lèi)、Student類(lèi)。其中,Person類(lèi)是基類(lèi),Teacher和Student繼承了Person類(lèi),是其派生類(lèi),派生的語(yǔ)法分別是class Teacher(Person)

17、和class Student(Person)。 Person類(lèi)擁有三個(gè)對(duì)象屬性:name、gender、weight,一個(gè)初始化方法_int_(),一個(gè)普通對(duì)象方法say();Teacher類(lèi)中只定義了一個(gè)對(duì)象方法teach();Student類(lèi)只定義了一個(gè)對(duì)象方法study(,20,由于Teacher和Student是Person的派生類(lèi),所以可以重用Person的三個(gè)屬性和兩個(gè)方法。在用t=Teacher(孔子,男,70)語(yǔ)句創(chuàng)建Teacher對(duì)象t的時(shí)候,也需要傳入三個(gè)參數(shù),自動(dòng)調(diào)用基類(lèi)Person的_init_()方法,創(chuàng)建Student對(duì)象同理。 創(chuàng)建的Teacher對(duì)象t可以訪(fǎng)問(wèn)t

18、each()方法,和基類(lèi)中的say()方法,也可以訪(fǎng)問(wèn)基類(lèi)中的name、gender、weight屬性,21,子類(lèi)方法對(duì)父類(lèi)方法的覆蓋,22,class Person: def _init_(self,name,gender=男,weight=70): =name self.gender=gender self.weight=weight print(A person named %s is created % ) def say(self): print(My name is %s % () class Teacher(Person):

19、def say(self): print(%s is a teacher % ) class Student(Person): def say(self): print(%s is a student % ,調(diào)用父類(lèi)的同名方法,23,class Person: def _init_(self,name,gender=男,weight=70): =name self.gender=gender self.weight=weight print(A person named %s is created % ) def say(

20、self): print(My name is %s % () class Teacher(Person): def _init_(self, name,gender=男,weight=70, title=講師): Person._init_(self,name,gender,weight) self.title=title def say(self): Person.say(self) print(%s is a teacher % ) def teach(self, lesson): print(%s teachs %s % (,les

21、son,在這個(gè)代碼中,子類(lèi)Teacher和子類(lèi)Student中定義了與父類(lèi)Person同名的方法_int_()方法和say()方法: 子類(lèi)Teacher中的_int_()方法傳入四個(gè)參數(shù):name、gender、weight、title,通過(guò)調(diào)用Person._init_(self, name, gender, weight)為父類(lèi)Person中的三個(gè)屬性賦值,title表示教師測(cè)職稱(chēng),是Teacher類(lèi)的專(zhuān)有對(duì)象屬性。同理,子類(lèi)Student的_init_()方法也傳入四個(gè)參數(shù),前三個(gè)為父類(lèi)中的三個(gè)對(duì)應(yīng)屬性賦值,major表示學(xué)生的專(zhuān)業(yè),是Student類(lèi)的專(zhuān)有對(duì)象屬性。 子類(lèi)Teacher中

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論