資源描述:
《python 面向?qū)ο髮W(xué)習(xí)總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、引言提到面向?qū)ο?,總是離不開幾個(gè)重要的術(shù)語:多態(tài)(Polymorphism),繼承(Inheritance)和封裝(Encapsulation)。Python也是一種支持OOP的動(dòng)態(tài)語言,本文將簡單闡述Python對(duì)面向?qū)ο蟮闹С帧T谟懻揚(yáng)ython的OOP之前,先看幾個(gè)OOP術(shù)語的定義:·類:對(duì)具有相同數(shù)據(jù)和方法的一組對(duì)象的描述或定義?!?duì)象:對(duì)象是一個(gè)類的實(shí)例?!?shí)例(instance):一個(gè)對(duì)象的實(shí)例化實(shí)現(xiàn)?!?biāo)識(shí)(identity):每個(gè)對(duì)象的實(shí)例都需要一個(gè)可以唯一標(biāo)識(shí)這個(gè)實(shí)例的標(biāo)記?!?shí)例屬性(instanceattribut
2、e):一個(gè)對(duì)象就是一組屬性的集合?!?shí)例方法(instancemethod):所有存取或者更新對(duì)象某個(gè)實(shí)例一條或者多條屬性的函數(shù)的集合?!ゎ悓傩裕╟lassattribute):屬于一個(gè)類中所有對(duì)象的屬性,不會(huì)只在某個(gè)實(shí)例上發(fā)生變化·類方法(classmethod):那些無須特定的對(duì)性實(shí)例就能夠工作的從屬于類的函數(shù)。1.Python中的類與對(duì)象Python中定義類的方式比較簡單:class?類名:類變量def__init__(self,paramers):def?函數(shù)(self,...)其中直接定義在類體中的變量叫類變量,而在類的方法中
3、定義的變量叫實(shí)例變量。類的屬性包括成員變量和方法,其中方法的定義和普通函數(shù)的定義非常類似,但方法必須以self作為第一個(gè)參數(shù)。舉例:classMyFirstTestClass:classSpec="itisatestclass"def__init__(self,word):print"say"+worddefhello(self,name):print"hello"+name在Python類中定義的方法通常有三種:實(shí)例方法,類方法以及靜態(tài)方法。這三者之間的區(qū)別是實(shí)例方法一般都以self作為第一個(gè)參數(shù),必須和具體的對(duì)象實(shí)例進(jìn)行綁定才能訪問
4、,而類方法以cls作為第一個(gè)參數(shù),cls表示類本身,定義時(shí)使用@classmethod;而靜態(tài)方法不需要默認(rèn)的任何參數(shù),跟一般的普通函數(shù)類似.定義的時(shí)候使用@staticmethod。classMethodTest():count=0defaddCount(self):MethodTest.count+=1print"Iamaninstancemethod,mycountis"+str(MethodTest.count),self@staticmethoddefstaticMethodAdd():MethodTest.count+=1p
5、rint"Iamastaticmethond,mycountis"+str(MethodTest.count)@classmethoddefclassMethodAdd(cls):MethodTest.count+=1print"Iamaclassmethod,mycountis"+str(MethodTest.count),clsa=MethodTest()a.addCount()'''Iamaninstancemethod,mycountis1<__main__.MethodTestinstanceat0x011EC990>'''a
6、.staticMethodAdd();#Iamastaticmethond,mycountis2MethodTest.staticMethodAdd();#Iamastaticmethond,mycountis3a.classMethodAdd();#Iamaclassmethod,mycountis4__main__.MethodTestMethodTest.classMethodAdd();#Iamaclassmethod,mycountis5__main__.MethodTestMethodTest.addCount()'''Tr
7、aceback(mostrecentcalllast):File"",line1,inMethodTest.addCount()TypeError:unboundmethodaddCount()mustbecalledwithMethodTestinstanceasfirstargument(gotnothinginstead)'''從上面的例子來看,靜態(tài)方法和類方法基本上區(qū)別不大,特別是有Java編程基礎(chǔ)的人會(huì)簡單的認(rèn)為靜態(tài)方法和類方法就是一回事,可是在Python中事實(shí)是這樣的嗎?看下面的例子:
8、MethodTest.classMethodAdd();#Iamaclassmethod,mycountis5__main__.MethodTestclasssubMethodTest(MethodTest