Python程序設(shè)計(jì)課件 第五章 類_第1頁
Python程序設(shè)計(jì)課件 第五章 類_第2頁
Python程序設(shè)計(jì)課件 第五章 類_第3頁
Python程序設(shè)計(jì)課件 第五章 類_第4頁
Python程序設(shè)計(jì)課件 第五章 類_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Python程序設(shè)計(jì)

第五章類本章知識(shí)點(diǎn)導(dǎo)圖

面向?qū)ο缶幊獭狾bjectOrientedProgramming,簡稱OOP,是一種程序設(shè)計(jì)思想。OOP把對(duì)象作為程序的基本單元,一個(gè)對(duì)象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)。

類(Class),也即面向?qū)ο?。簡單地說,可以把它理解為“物以類聚”,即有相同的功能特性?!邦悺焙盟茍D紙、模具,另一方面又可以理解為是功能(函數(shù))的組合。類的定義Python中的類(Class)是一個(gè)抽象的概念,這也是Python的核心概念,可以把它簡單看作數(shù)據(jù)以及由存取、操作這些數(shù)據(jù)的方法所組成的一個(gè)集合。函數(shù)的作用就是重復(fù)利用代碼,那為什么還要另外再定義類這個(gè)概念呢?類有以下優(yōu)點(diǎn):(1)類對(duì)象是多態(tài)的:也就是多種形態(tài),這意味著我們可以對(duì)不同的類對(duì)象使用同樣的操作方法,而不需要額外寫代碼。(2)類的封裝:封裝之后,可以直接調(diào)用類的對(duì)象,來操作內(nèi)部的一些類方法,不需要讓使用者看到代碼工作的細(xì)節(jié)。(3)類的繼承:類可以從其他類或者元類中繼承它們的方法,直接使用。定義類(class)的語法:classNameClass(object):deffname(self,name):=name第一行語法是class后面緊接類的名稱,最后帶上“:”。類的名稱首字母最好大寫,以區(qū)別函數(shù)。第二行開始是類的方法,和函數(shù)非常相似,但是與普通函數(shù)不同的是,它的內(nèi)部有一個(gè)“self”參數(shù),它的作用是對(duì)對(duì)象自身的引用。以一個(gè)例子來說明面向過程和面向?qū)ο笤诔绦蛄鞒躺系牟煌?。假設(shè)要處理學(xué)生的成績表,輸出學(xué)生的成績,面向過程的程序可以通過函數(shù)來實(shí)現(xiàn),比如打印學(xué)生的成績:In[1]:defprint_score(name,score):

...:print('{0},{1}'.format(name,score))In[2]:print_score("張三",80)

張三,80

如果采用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,我們首選思考的不是程序的執(zhí)行流程,而是Student這種數(shù)據(jù)類型應(yīng)該被視為一個(gè)對(duì)象,這個(gè)對(duì)象擁有name和score這兩個(gè)屬性(Property)。如果要打印一個(gè)學(xué)生的成績,首先必須創(chuàng)建出這個(gè)學(xué)生對(duì)應(yīng)的對(duì)象,然后給對(duì)象發(fā)一個(gè)print_score消息,讓對(duì)象自行把自己的數(shù)據(jù)打印出來。In[3]:classStudent(object):

...:def__init__(self,name,score):

...:=name

...:self.score=score

...:defprint_score(self):

...:print('{0},{1}'.format(,self.score))給對(duì)象發(fā)消息實(shí)際上就是調(diào)用對(duì)象對(duì)應(yīng)的關(guān)聯(lián)函數(shù),我們稱之為對(duì)象的方法(Method)。面向?qū)ο蟮某绦驅(qū)懗鰜砣缦拢篒n[4]:bart=Student('BartSimpson',59)

...:lisa=Student('LisaSimpson',87)

...:bart.print_score()BartSimpson,59

In[5]:lisa.print_score()LisaSimpson,87類的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——它們必須有一個(gè)額外的第一個(gè)參數(shù),但是在調(diào)用此方法的時(shí)候,不用為這個(gè)參數(shù)賦值,Python會(huì)提供這個(gè)值。這個(gè)特別的變量指對(duì)象本身,它就是self。類的創(chuàng)建創(chuàng)建類的方法跟自定義函數(shù)類似,但有區(qū)別,具體如下:1、創(chuàng)建類要用class引出;2、類的名稱首字母要大寫;3、類中的功能函數(shù)都需要有一個(gè)self參數(shù);4、參數(shù)傳進(jìn)類內(nèi)需要用self.來接收,如接收參數(shù)a的值為self.a=a;5、類中的屬性和參數(shù)在引用時(shí)要在其前加self.。在類中有一些固定的參數(shù),稱為屬性;類內(nèi)的函數(shù)稱為方法?!纠?-1】創(chuàng)建一個(gè)Peo類。In[6]:classPeo:

...:def__init__(self,name,age,sex):

...:self.Name=name

...:self.Age=age

...:self.Sex=sex

...:defspeak(self):

...:print("myname:%s"%self.Name)這個(gè)類首先寫了一個(gè)特定的方法__init__()用來傳遞參數(shù),它將name、age、sex三個(gè)參數(shù)值賦給了self.Name、self.Age、self.Sex。其實(shí)self.Name、self.Age、self.Sex這三個(gè)參數(shù)名稱不一定非得跟name、age、sex一致,如self.Name也可以隨便命名為self.xm或者self.abc都可以,只是為了方便識(shí)別、記憶,所以一般情況下還是對(duì)應(yīng)比較方便。但是self.是必須有的且不能被改變。Peo類中的speak()是一個(gè)類內(nèi)函數(shù),即方法。類內(nèi)函數(shù)都必須帶有參數(shù)self,而且必須作為其第一個(gè)參數(shù)。

創(chuàng)建類時(shí),只要?jiǎng)?chuàng)建了名為__init__()的特定方法,在實(shí)例化這個(gè)類時(shí)就會(huì)運(yùn)行這個(gè)方法。由于__init__()方法可以傳遞參數(shù),所以創(chuàng)建對(duì)象時(shí)就可以把屬性設(shè)置為我們希望的值,__init__()這個(gè)方法會(huì)在創(chuàng)建對(duì)象時(shí)完成初始化。

實(shí)例化Peo類的對(duì)象。In[7]:zhangsan=Peo("zhangsan",24,'man')

...:print(zhangsan.Age)24

In[8]:print(zhangsan.Name)zhangsan

In[9]:print(zhangsan.Sex)man

In[10]:zhangsan.speak()myname:zhangsan

和普通的函數(shù)相比,在類中定義的函數(shù)只有一點(diǎn)不同,就是第一個(gè)參數(shù)永遠(yuǎn)是實(shí)例變量

self,并且調(diào)用時(shí)不用傳遞該參數(shù)。除此之外,類的方法和普通函數(shù)區(qū)別不大。因此,參數(shù)仍然可以使用默認(rèn)參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù)等方式。參數(shù)的傳遞

類像函數(shù)一樣,可以接收傳遞參數(shù)。類的參數(shù)可以在__init__()方法中傳入,也可以在其方法中傳入,如下面的例子中__init__()傳入name參數(shù),在tall()中傳入身高參數(shù)high。下面的例5-2創(chuàng)建了一個(gè)類名為Person,里面有兩個(gè)屬性x和y,x是一個(gè)數(shù)組,y是字符串。Person還創(chuàng)建有5個(gè)方法(子函數(shù))?!纠?-2】類的參數(shù)傳入方式。In[11]:classPerson:...:"""...:這是一個(gè)類,舉例說明了如何傳入?yún)?shù)和創(chuàng)建各種功能。...:"""...:x=(1,2,2)...:y="這是一個(gè)關(guān)于類的屬性和方法的應(yīng)用案例,類名為Person。"...:...:def__init__(self,name):...:=name...:...:defprint(self):#每個(gè)方法(子函數(shù))都必須要有self參數(shù)...:'''...:打印Person類的說明和固有屬性...:'''...:print(self.y)...:print("人有%d張嘴,%d只眼睛,%d只手。"%(self.x[0],self.x[1],self.x[2]))...:

...:defnam(self):...:"""...:輸出實(shí)例的姓名...:"""...:print("姓名:",)...:...:deftall(self,high):...:"""...:接收實(shí)例的身高參數(shù),并打印輸出...:"""...:self.high=high...:print("這是%s身高(Cm):"%,high)#此處可以直接用high...:...:definfo(self):...:print("%s的身高(Cm):%s"%(,self.high))#此處必須用self.high先實(shí)例化一個(gè)實(shí)例。In[12]:yubg=Person("余本國")In[13]:yubg.print()這是一個(gè)關(guān)于類的屬性和方法的應(yīng)用案例,類名為Person。人有1張嘴,2只眼睛,2只手。

In[14]:yubg.nam()姓名:余本國

In[15]:yubg.tall(170)這是余本國身高(Cm):170

In[16]:()

余本國的身高(Cm):170說明:def__init__(self,name)和deftall(self,high)都可以傳入?yún)?shù),但前一種方式傳入的參數(shù)在實(shí)例化的時(shí)候就需要傳入?yún)?shù),后一種傳入?yún)?shù)方法是在調(diào)用該方法時(shí)才傳入?yún)?shù)。私有變量與私有方法

類可以有公有變量與公有方法,也可以有私有變量與私有方法,公有部分的對(duì)象可以從外部訪問,而私有部分的對(duì)象只有在類的內(nèi)部才可訪問。在普通變量名或方法名(即公有變量名或方法名)前加雙下劃線“__”,即可成為私有變量或方法?!纠?-3】類的私有變量與私有方法。具體代碼如下:In[17]:classPubAndPri:...:pub="這是公有變量"...:__pri="這是私有變量"...:...:def__init__(self):...:self.other="公有變量也可這樣定義"...:...:defout_pub(self):...:print("公有方法",self.pub,self.__pri)...:...:def__out_pri(self):...:print("私有方法",self.pub,self.__pri)In[18]:pp=PubAndPri()

In[19]:pp.out_pub()#訪問公有方法公有方法這是公有變量這是私有變量

In[20]:print(pp.pub,pp.other) #訪問公有變量這是公有變量公有變量也可這樣定義

In[21]:try:...:pp.__out_pri()...:exceptExceptionase:...:print("調(diào)用私有方法發(fā)生錯(cuò)誤!")調(diào)用私有方法發(fā)生錯(cuò)誤!

In[22]:try:...:print(pp._pri)...:exceptExceptionase:...:print("訪問私有變量發(fā)生錯(cuò)誤!")訪問私有變量發(fā)生錯(cuò)誤!類的調(diào)用類的調(diào)用跟函數(shù)的調(diào)用一樣。#file_A.py文件classAx:def__init__(self,xx,yy):self.x=xxself.y=yydefadd(self):print("x和y的和為:%d"%(self.x+self.y))下面在B.py文件中調(diào)用file_A.py文件中的類Ax中的方法add。#B.py文件:fromfile_AimportAxa=Ax(2,3)a.add()importfile_Aa=file_A.Ax(2,3)a.add()或以上函數(shù)和類的調(diào)用方法都是在同一個(gè)文件下的調(diào)用,對(duì)于不同文件下的調(diào)用時(shí),需要進(jìn)行“說明”,即需要有個(gè)“導(dǎo)引”,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論