Python支持多種編程方式:面向過程,面向?qū)ο?,面向切?裝飾器部分)等
OOP思想
- 面向?qū)ο蟮幕菊軐W(xué):世界是由具有各自運(yùn)動(dòng)規(guī)律和內(nèi)部狀態(tài)的對象組成,對象之間的相互作用和通訊構(gòu)成了世界
- 唯一性:世界上沒有兩片相同的樹葉,同樣的沒有兩個(gè)相同的對象
- 分類性:分類是對現(xiàn)實(shí)世界的抽象
面向?qū)ο筇匦?/h2>
三大特性:封裝,繼承和多態(tài)
1. 封裝
1.1.類的公有屬性
類外面都可以訪問的屬性叫公有屬性 X
屬于這個(gè)類的對象都可以訪問的屬性叫公有屬性 V
1.2 更改類的公有屬性
I. 通過對象改(在自己的內(nèi)存中創(chuàng)建了一個(gè)新的變量)
r1.nationality = CN
II. 通過類改
Role.nationality = JP
對象訪問公有屬性:對象的內(nèi)存地址—>類地址(先在自己的內(nèi)存地址查找,如果不存在就在類地址中查找) 類似與類方法繼承
- 類中封裝了:字段,方法
- 對象中封裝了:普通字段的值
class F1(object):
def __init__(self,n):
self.N = n
print('F1')
class F2(object):
def __init__(self,arg1):
self.a =arg1
print('F2')
class F3(object):
def __init__(self,arg2):
self.b = arg2
print('F3')
o1 = F1('Alex')
o2 = F2(o1)
o3 = F3(o2)
如何通過o3得到Alex: o3.b.a.N
封裝不僅可以封裝字符串,數(shù)字,還有對象等
2. 繼承
繼承的過程就是從一般到特殊的過程
class F1(object):
def __init__(self):
print("F1")
def a1(self):
print('F1a1')
def a2(self):
print('F1a2')
class F2(F1):
def __init__(self):
print('F2')
def a1(self): #--3--
self.a2() #--4--
print('F2a1') #--7--
def a2(self):
print('F2a2')
class F3(F2):
def __init__(self):
print('F3')
def a2(self): #--5--
print('F3a2') #--6--
obj = F3() # --1--
obj.a1() #--2--
F3
F3a2
F2a1
經(jīng)典類與新式類
SchoolMember.__init__(self,name,age,sex) #經(jīng)典類寫法
super(Teacher,self).__init__(name,age,sex) #新式類寫法
Python2 經(jīng)典類深度查詢,新式類廣度查詢
Python3 經(jīng)典類和新式類都為廣度查詢
多重繼承
class A(object):
def __init__(self, a):
print('init A...') #--5--
self.a = a #--6--
class B(A):
def __init__(self, a):
super(B, self).__init__(a) #--3--
print('init B...') #--8--
class C(A):
def __init__(self, a):
super(C, self).__init__(a) #--4--
print('init C...') #--7--
class D(B, C):
def __init__(self, a):
super(D, self).__init__(a) #--2--
print('init D...') #--9--
d = D("d") #--1--
init A...
init C...
init B...
init D...
參考文檔:http://www.cnblogs.com/superxuezhazha/p/5737967.html
3. 多態(tài)
python的多態(tài)用一句話概括就是,有這種方法,并且傳入相應(yīng)的參數(shù)就行
參考文檔: http://www.cnblogs.com/superxuezhazha/p/5737955.html