『無為則無心』Python物件導向 — 53、對Python中封裝的介紹

繁華似錦Fighting發表於2022-02-24

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):
    
  • 多重繼承,會使子類同時擁有多個父類,並且會獲取到所有父類中的屬性和方法。
  • 如果多個父類中有同名的方法,則會現在第一個父類中尋找,然後找第二個,然後找第三個,以此類推。
    (在詳細嘮叨一下,找第一個類,然後找這個類的父類,如果沒有在開始找第二個類,然後第二個類如果有父類,再找第二個類的父類,以此類推,如有重複的父類,之前找過的類,不重複查詢。)
    也就是如果一個類繼承多個父類,優先繼承第一個父類的同名屬性和方法。
  • 在開發中沒有特殊的情況,應該儘量避免使用多重繼承,因為多重繼承會讓我們的程式碼過於複雜。

相關文章