一 繼承
- 讓類與類之間產(chǎn)生關(guān)系
- 提高代碼的復(fù)用性
class Animal:
# def sleep(self):
# print('動物睡覺')
# def run(self):
#print('動物跑')
class Dog(Animal):
def sleep(self):
print('狗睡覺')
def run(self):
print('狗跑')
dog = Dog()
dog.run()
dog.sleep()
>>>
動物跑
動物睡覺
#定義狗類
#1,在動物上面修改,添加狗類的獨(dú)有功能但這樣修改違反ocp原則。
#2,直接從animal中繼承他的屬性和方法。
# 在定義類的時候,可以在類名后面的括號里面指定當(dāng)前的父類
r = isdubclass(Dog, Animal)
>>>
Ture
二 方法的重寫
先執(zhí)行子類的函數(shù) 若子類無函數(shù)便執(zhí)行父類函數(shù),這個特點稱之為方法的重寫。
# def sleep(self):
# print('動物睡覺')
# def run(self):
#print('動物跑')
三 . super()
? super()可以獲取當(dāng)前類的父類
? 并且通過super()返回對象調(diào)用父類方法時,不需要傳遞self
四 多重繼承
? 在Python中是支持多重繼承的。也就是我們可以為一個類同時制定多個父類
? 可以在類名的()后邊添加多個類,來實現(xiàn)多重繼承
? 多重繼承,會使子類同時擁有多個父類,并且會獲取到所有父類中的方法
? 在開發(fā)中沒有特殊情況,應(yīng)該盡量避免使用多重繼承。因為多重繼承會讓我們的代碼更加復(fù)雜
? 如果多個父類中有同名的方法,則會先在第一個父類中尋找,然后找第二個,找第三個...前面會覆蓋后面的
五 多態(tài)
? 多態(tài)是面向?qū)ο蟮娜筇匦灾?。從字面理解就是多種形態(tài)
? 一個對象可以以不同形態(tài)去呈現(xiàn)
? 面向?qū)ο笕筇匦?br>
? 封裝 確保對象中數(shù)據(jù)的安全
? 繼承 保證了對象的擴(kuò)展性
? 多態(tài) 保證了程序的靈活性
六 屬性和方法
? 屬性
? 類屬性,直接在類中定義的屬性是類屬性
? 類屬性可以通過類或類的實例訪問到。但是類屬性只能通過類對象來修改,無法通過實例對象修改
? 實例屬性 通過實例對象添加的屬性屬于實例屬性
? 實例屬性只能通過實例對象來訪問和修改,類對象無法訪問修改
? 方法
? 在類中定義,以self為第一個參數(shù)的方法都是實例方法
? 實例方法在調(diào)用時,Python會將調(diào)用對象以self傳入
? 實例方法可以通過類實例和類去調(diào)用
? 當(dāng)通過實例調(diào)用時,會自動將當(dāng)前調(diào)用對象作為self傳入
? 當(dāng)通過類調(diào)用時,不會自動傳遞self,我們必須手動傳遞self
? 類方法 在類的內(nèi)容以@classmethod 來修飾的方法屬性類方法
? 類方法第一個參數(shù)是cls 也會自動被傳遞。cls就是當(dāng)前的類對象
? 類方法和實例方法的區(qū)別,實例方法的第一個參數(shù)是self,類方法的第一個參數(shù)是cls
? 類方法可以通過類去調(diào)用,也可以通過實例調(diào)用
? 靜態(tài)方法
? 在類中用@staticmethod來修飾的方法屬于靜態(tài)方法
? 靜態(tài)方法不需要指定任何的默認(rèn)參數(shù),靜態(tài)方法可以通過類和實例調(diào)用
? 靜態(tài)方法,基本上是一個和當(dāng)前類無關(guān)的方法,它只是一個保存到當(dāng)前類中的函數(shù)
? 靜態(tài)方法一般都是些工具方法,和當(dāng)前類無關(guān)