1、繼承的概念
在Python中,如果兩個類存在父子級別的繼承關係,子類中即便沒有任何屬性和方法,此時建立一個子類物件,那麼這個子類物件會擁有父類中所有屬性和方法的使用權,這就是在Python中的繼承概念。
在Python測繼承中,我們一般會抽取出一類事物中,所具有相同的特徵屬性和行為到一個類中,這樣的類我們稱之為父類,也可以叫超類、基類。
凡是通過繼承建立出來的類,我們稱之為子類或者衍生類,可以直接繼承父類中的屬性和方法。
2、繼承的好處
- 繼承最大的作用就是簡化程式碼,提高了程式碼的複用性,提高軟體開發效率。
- 繼承的出現讓類與類之間產生了關係,提供了多型的前提。
3、繼承體驗
Python物件導向的繼承指的是多個類之間的所屬關係,即子類預設繼承父類的所有屬性和方法,具體如下:
# 繼承:子類預設繼承父類的所有屬性和方法
# 1. 定義父類Parent
class Parent(object):
def __init__(self):
self.num = 1
def info_print(self):
print(self.num)
# 2. 定義子類Child 繼承父類Parent
class Child(Parent):
pass
# 建立Child類例項,呼叫父類Parent中的方法和屬性
ch = Child()
print(ch.num) # 1
ch.info_print() # 1
說明:在Python中,所有類預設繼承
object
類,object
類是頂級類或基類,其他子類都是object
的派生類。
4、單繼承
單繼承:一個父類只被一個子類繼承,就叫做單繼承。
故事主線:一個煎餅果子老師傅,在煎餅果子界摸爬滾打多年,研發了一套精湛的攤煎餅果子的技術。師父要把這套技術傳授給他的唯一的最得意的徒弟。
# 1. 師父類,屬性和方法
class Master(object):
def __init__(self):
self.gongfu = '[古法煎餅果子配方]'
def make_cake(self):
print(f'運用{self.gongfu}製作煎餅果子')
# 2. 定義徒弟類,繼承師父類
class Prentice(Master):
pass
# 3. 建立物件tudi
tudi = Prentice()
# 4. 物件訪問例項屬性
print(tudi.gongfu) # [古法煎餅果子配方]
# 5. 物件呼叫例項方法
tudi.make_cake() # 運用[古法煎餅果子配方]製作煎餅果子
5、多繼承
故事推進:徒弟是個愛學習的好孩子,想學習更多的煎餅果子技術,於是搜尋到學院派煎餅果子,決定學院學習更多的煎餅果子技術。
所謂多繼承意思就是一個類同時繼承了多個父類。
# 1.建立師父類,屬性和方法
class Master(object):
def __init__(self):
self.gongfu = '[古法煎餅果子配方]'
def make_cake(self):
print(f'運用{self.gongfu}製作煎餅果子')
# 2.建立學院派類 屬性和方法
class School(object):
def __init__(self):
self.gongfu = '[學院派煎餅果子配方]'
def make_cake(self):
print(f'運用{self.gongfu}製作煎餅果子')
# 2. 定義徒弟類,繼承師父類 和 宗師類
class Prentice(School, Master):
pass
# 3. 建立物件tudi
tudi = Prentice()
# 4. 物件訪問例項屬性
print(tudi.gongfu)
# 5. 物件呼叫例項方法
tudi.make_cake()
"""
輸出內容:
[學院派煎餅果子配方]
運用[學院派煎餅果子配方]製作煎餅果子
"""
總結:
- 在Python中是支援多重繼承的,也就是我們可以為一個類同時指定多個父類,如:
class Prentice(School, Master):
- 多重繼承,會使子類同時擁有多個父類,並且會獲取到所有父類中的屬性和方法。
- 如果多個父類中有同名的方法,則會現在第一個父類中尋找,然後找第二個,然後找第三個,以此類推。
(在詳細嘮叨一下,找第一個類,然後找這個類的父類,如果沒有在開始找第二個類,然後第二個類如果有父類,再找第二個類的父類,以此類推,如有重複的父類,之前找過的類,不重複查詢。)
也就是如果一個類繼承多個父類,優先繼承第一個父類的同名屬性和方法。 - 在開發中沒有特殊的情況,應該儘量避免使用多重繼承,因為多重繼承會讓我們的程式碼過於複雜。