自學(xué)整理記錄,大神見笑
單繼承
- 繼承就是子類擁有父類所有的方法和屬性
- 繼承語(yǔ)法:
class 類名(父類名):
?pass
- 子類即可直接使用父類已經(jīng)封裝好的方法,也可根據(jù)需求,封裝子類特有的屬性和方法
- 子類也叫派生類,父類也叫基類
- 繼承的傳遞性:C類繼承B類,B類又繼承A類,則C類具有B類和A類所有屬性和方法
方法的重寫
- 如果父類方法不能滿足子類需求,則子類可以重寫父類的方法,重新實(shí)現(xiàn)邏輯;執(zhí)行時(shí),只會(huì)調(diào)用子類重寫的方法,不會(huì)調(diào)用父類方法
- 如果父類方法只能滿足子類一部分需求,則可以在重寫中使用super().父類方法來(lái)調(diào)用父類的方法,然后再補(bǔ)充另外一部分需求
- 注:super是一個(gè)特殊的類,super()就是使用super類創(chuàng)建出來(lái)的對(duì)象
- 另外一種調(diào)用方法,在Python2.x中可以使用,3.x中暫時(shí)還支持這種方式,但不推薦使用,因?yàn)楦割惏l(fā)生變化,方法調(diào)用位置的類名同樣需要修改
父類名.方法(self)
父類的私有屬性和私有方法
- 子類不能在自己方法內(nèi)部直接調(diào)用父類私有屬性和私有方法
- 子類對(duì)象可以通過父類的共有方法間接訪問到父類私有方法和私有屬性
多繼承
- 子類可以擁有多個(gè)父類,并具有所有父類的屬性和方法
- 語(yǔ)法:
class 子類名(父類1,父類2...):
?pass
- 注意:如果繼承的父類中有同名方法,則系統(tǒng)會(huì)根據(jù)MRO順序調(diào)用方法,另外盡量避免繼承的父類中有同名方法
- MRO---方法搜索順序,Python內(nèi)置了屬性__mro__可以查看方法的搜索順序,其按照每個(gè)類順序?qū)ふ?,有該方法就?zhí)行,不再尋找;如果沒有找到,會(huì)報(bào)錯(cuò)
print(方法名.__mro__)
- 該方法返回元組
新式類和舊式類
新式類都是以O(shè)bject為基類,推薦使用
經(jīng)典類不以O(shè)bject為基類,不推薦使用
- 在Python2.x中,不指定繼承Object,則不會(huì)以O(shè)bject為基類
- 在Python3.x中,默認(rèn)會(huì)繼承Object基類
- 建議如果沒有父類,統(tǒng)一繼承自O(shè)bject類,這樣2.x和3.x中都能使用
多態(tài)
- 多態(tài)以繼承和重寫父類方法為前提
- 不同的子類對(duì)象調(diào)用相同的父類方法