類的繼承 多繼承

2021-10-01 16:49:53 字數 1737 閱讀 6534

多繼承要注意很多地方,以下**只是最基本多繼承方式,下面會講到多繼承的基本格式和繼承方法

簡單說明:

1、如果在子類中需要父類的構造方法就需要顯示的呼叫父類的構造方法,或者不重寫父類的構造方法。

2、在呼叫基類的方法時,需要加上基類的類名字首,且需要帶上 self 引數變數。區別在於類中呼叫普通函式時並不需要帶上 self 引數。

3、python 總是首先查詢對應型別的方法,如果它不能在派生類中找到對應的方法,它才開始到基類中逐個查詢。(先在本類中查詢呼叫的方法,找不到才去父類中找。)

**演示:

class father(object):

# 定義父類的構造方法

def __init__(self, n, a, w):

self.name = n

self.age = a

self.weight = w

def speak(self):

print("%s說,我%d歲,我有%s千克,我打籃球很好,長得也很帥!"

% (self.name, self.age, self.weight))

class son(father):

# 定義乙個子類的建構函式

def __init__(self, n, a, w, h):

self.high = h

# 覆寫父類的方法

def speak(self):

print("%s說,我%d歲,我有%s千克,我打籃球很好,我的彈跳有%s"

% (self.name, self.age, self.weight, self.high))

class singer():

# 定義另外乙個類的建構函式

def __init__(self, n, s):

self.name = n

self.sing = s

# 方法重寫

def speak(self):

print("我叫%s,我是一名%s" % (self.name, self.sing))

class myself(singer, son):

# 定義初始化方法

def __init__(self,n,a,w,h,s):

self.name = n

self.age = a

self.weight = w

self.high = h

self.sing = s

def speak(self):

print("我叫%s,我今年%d,我有%d千克,我的彈跳有%s" %

(self.name,self.age,self.weight,self.high))

person = myself("凌薇",18,60,"1.1公尺","歌手")

person.speak()

對於初學者,

說明:

需要注意圓括號中父類的順序,若是父類中有相同的方法名,而在子類使用時未指定,python從左至右搜尋 即方法在子類中未找到時,從左到右查詢父類中是否包含方法。

需要注意圓括號中父類的順序,若是父類中有相同的方法名,而在子類使用時未指定,python從左至右搜尋 即方法在子類中未找到時,從左到右查詢父類中是否包含方法。

這裡的繼承方式是廣度優先演算法思想,因為python3中的類統一按廣度優先來繼承的。

詳細請看:深度優先 & 廣度優先

繼承 多繼承

一 繼承 1 封裝 self引數傳入的是建立的物件,self可以直接將物件帶引數傳入類中方法,這種在物件中封裝資料,對類進行了優化的方法就叫封裝。2 當乙個繼承自另乙個累的時候,會先去子類裡面找,如果有先呼叫沒有去夫類找。1 class rectangle 矩形類 def init self,len...

繼承 多繼承

繼承 父類 基類 新內容 子類 派生類 子類繼承父類,子類繼承父類所有的成員變數和成員函式 父類有的子類都有,子類沒有的可以加 繼承方式 控制父類成員在子類中的訪問許可權 public private protected 格式 calss 子類 許可權 父類 規則 繼承方式 public 父類私有成...

介面類的多繼承

動物園 老虎 tiger 走路 游泳 天鵝 swan 走路 游泳 飛 老鷹 oldying 飛 走路 from abc import abstractmethod,abcmeta 介面的多繼承 介面類 class swim animal metaclass abcmeta 游泳 abstractme...