Python物件導向 類的繼承

2021-09-22 22:52:13 字數 4040 閱讀 5910

基本概念

物件導向三要素之一,繼承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 ...