基本概念
物件導向三要素之一,繼承inheritance
上例可以看出,通過繼承、貓類不同寫**,直接繼承了父類的屬性和方法。
繼承:
定義格式如下
class 子類名(基類1[,基類2,……]):
語句塊
如果類定義時,沒有基類列表,等同於繼承自object。在python3中object類是所有物件的根基類
class a:
pass
class a(object):
pass
注意,上例在python2中,兩種寫法是不同的
python個支援多繼承,繼承也可以公升級
檢視繼承的特殊屬性和方法有
特殊屬性和方法
含義base類的基類
bases類的基類元組
mro顯示方法查詢順序、基類的元組
mro()
顯示方法查詢順序,返回列表
subclasses()
類的子類列表
繼承中的訪問控制
從父類繼承,自己沒有的,就可以到父類中找
私有的都是不可以訪問的,但是本質上依然是改了名稱放在這個屬性所在類或例項__dict__中。知道這個新名稱就可以直接找到這個隱藏的變數。
總結繼承時,公有的,子類和例項都可以隨機訪問;私有成員被隱藏,子類和例項不可直接訪問,但私有變數所在的類內的方法中可以訪問這個私有變數。
python通過自己一套實現,實現和其它語言一樣的物件導向的繼承機制,
例項屬性查詢順序
例項的__dict__----->類__dict__---->如果有繼承----->父類的__dict__
如果搜尋這些地方後沒有找到就會拋異常,先找到就立即返回了。
方法的重組、覆蓋override
class animal:
def shout(self):
print('animal')
class cat(animal):
#覆蓋了父類的方法
#覆蓋了父類的方法
super()可以訪問到父類的類屬性
對於靜態方法和類方法
這些方法都可以覆蓋,原理都一樣,屬性字典的搜尋順序
繼承時使用初始化
上例**可知:
如果類b定義時宣告繼承自類a,則在類b中__bases__中是可以看到類a
但是這和是否呼叫類a的構造方法是兩回事
但是b中呼叫了父類a的構造方法,就可以擁有父類的屬性了
python物件導向 類的繼承
子類 son類 父類 father類 以下案例均表示son類繼承父類的一些屬性和初始化引數構造等。5個模組 1 直接呼叫父類屬性方法 2 重寫父類屬性方法 3 強制呼叫父類私有屬性方法 4 呼叫父類的 init 方法 5 繼承父類初始化過程中的引數 class father def init sel...
python學習 物件導向 類 物件 繼承
約定成俗的類的命名方式 1 首字母大寫 2 為了與其他進行區分盡量避免使用 建議採用studenthomework小駝峰的格式 類的常規格式 class student 定義變數 資料成員 student sum 80 類變數 建構函式 def init self,name,age 其中的self....
物件導向 類的繼承
1 派生類物件的構造與析構 建立派生類物件的時候首先呼叫基類的建構函式初始化基類成員,隨後才呼叫派生類建構函式 派生類物件的析構過程首先是呼叫派生類的析構函式,再呼叫基類的析構函式 2 多重繼承 b c都繼承於a,而d繼承於b和c 多重繼承的兩義性 當d的物件呼叫a中的成員時就會產生兩義性 d b ...