oop就是代碼的重用,通過(guò)分解代碼,最小化代碼的冗余以及對(duì)現(xiàn)存的代碼進(jìn)行定制來(lái)編寫程序;OOP模型中有兩種對(duì)象,類對(duì)象和實(shí)例對(duì)象。類對(duì)象提供默認(rèn)行為,是生產(chǎn)實(shí)例對(duì)象的工廠;類對(duì)象和實(shí)例對(duì)象都有各自命名空間。
· class語(yǔ)句創(chuàng)建類對(duì)象并將其賦值給變量名· class語(yǔ)句內(nèi)的頂層賦值語(yǔ)句會(huì)創(chuàng)建類的屬性· 類屬性提供對(duì)象的狀態(tài)和行為
· 每次類調(diào)用時(shí),都會(huì)創(chuàng)建并返回新的實(shí)例對(duì)象· 每個(gè)實(shí)例對(duì)象繼承類的屬性并獲得了自己的命名空間· 每個(gè)實(shí)例對(duì)象通過(guò)構(gòu)造方法獲得每個(gè)實(shí)例自己的屬性
封裝,是將對(duì)象的數(shù)據(jù)與操作數(shù)據(jù)的方法相結(jié)合,通過(guò)方法將對(duì)象的數(shù)據(jù)與實(shí)現(xiàn)細(xì)節(jié)保護(hù)起來(lái),就稱為封裝。外界只能通過(guò)對(duì)象的方法訪問(wèn)對(duì)象,因此封裝同時(shí)也實(shí)現(xiàn)了對(duì)象的數(shù)據(jù)隱藏
class Person():#類的屬性--靜態(tài)屬性country="China"#封裝--初始化方法def __init__(self,*args): self.name=args[0] self.age=args[1] self.aggr=args[2] self.sex=args[3]#方法def walk(self,n): print("%szoule%sbu"%(self.name,n))#調(diào)用類創(chuàng)建實(shí)例對(duì)象,自動(dòng)執(zhí)行構(gòu)造方法__init__jonny=Person('jonny',11,23,'man')#實(shí)例對(duì)象調(diào)用類的方法jonny.walk(10)#實(shí)例對(duì)象調(diào)用類的屬性print(jonny.country)
類可以通過(guò)繼承進(jìn)行定制;類的繼承豐富了軟件的層級(jí),在層級(jí)較低的地方覆蓋現(xiàn)有的屬性,讓其行為特定化。
在python中,實(shí)例對(duì)象從類中繼承,而類繼承于超類
· 超類寫在類開頭的括號(hào)中
· 類從其超類中繼承屬性
· 實(shí)例會(huì)繼承所有可讀取類的屬性
· 每次實(shí)例對(duì)象的屬性調(diào)用都會(huì)進(jìn)行類樹搜索
· 邏輯的修改是通過(guò)創(chuàng)建子類,而不是修改超類
#創(chuàng)建父類---經(jīng)典類class a(): a1="11"#創(chuàng)建子類,繼承父類aclass b(a): b1="22"#調(diào)用父類的屬性print(b.a1)
以上的例子中父類是經(jīng)典類,因?yàn)楦割愇蠢^承object類;繼承object類的父類是新式類
#創(chuàng)建父類---新式類class a(object): a1="11"#創(chuàng)建子類,繼承父類aclass b(a): b1="22"#調(diào)用父類的屬性print(b.a1)
在繼承中,父類是經(jīng)典類那么子類就是經(jīng)典類;父類是新式類,子類就是新式類
python支持繼承多個(gè)類,那么在繼承父類的屬性和方法時(shí)改怎么找呢?
class D(object): def display(self): print('D.display')class C(D): def display(self): print('C.display')class B(D): def display(self): print('B.display')class A(B,C): def display(self): print('A.display')a=A()a.display()
執(zhí)行display方法時(shí),查找順序?yàn)?A--B--C--D
類的多態(tài)性是指具有不同功能的函數(shù)可以使用相同的函數(shù)名,這樣就可以用一個(gè)函數(shù)名調(diào)用不同內(nèi)容的函數(shù)。
class Person():def display(self): passclass Man(Person): def display(self): print("man")class Woman(Person): def display(self): print("woman")def func(obj): obj.display()#實(shí)例化對(duì)象man1=Man()woman1=Woman()#多態(tài)func(man1)func(woman1)
來(lái)源:http://www.icode9.com/content-1-102401.html