1. 程式人生 > >程式中的繼承(單繼承,多繼承)簡單的介紹

程式中的繼承(單繼承,多繼承)簡單的介紹

程式中的繼承

  • 在程式中,繼承描述的是多個類之間的所屬關係。
  • 如果一個類A裡面的屬性和方法可以複用,則可以通過繼承的方式,傳遞到類B裡。
  • 那麼類A就是基類,也叫做父類;類B就是派生類,也叫做子類。

單繼承:子類只繼承一個父類

  • 故事情節:煎餅果子老師傅在煎餅果子界摸爬滾打幾十年,擁有一身精湛的煎餅果子技術,並總結了一套"古法煎餅果子配方"。

  • 可是老師傅年邁已久,在嗝屁之前希望把自己的配方傳承下去,於是老師傅把配方傳給他的徒弟大貓...


# 定義一個Master類
class Master(object):
    def __init__(self):
        # 屬性
        self.kongfu = "古法煎餅果子配方" 

    # 例項方法
    def make_cake(self):
        print("按照 <%s> 製作了一份煎餅果子..." % self.kongfu)


# 定義Prentice類,繼承了 Master,則Prentice是子類,Master是父類。
class Prentice(Master): 
    # 子類可以繼承父類所有的屬性和方法,哪怕子類沒有自己的屬性和方法,也可以使用父類的屬性和方法。
    pass                

# laoli = Master()
# print(laoli.kongfu)
# laoli.make_cake()

damao = Prentice()  # 建立子類例項物件
print(damao.kongfu) # 子類物件可以直接使用父類的屬性
damao.make_cake()   # 子類物件可以直接使用父類的方法

說明:

  • 雖然子類沒有定義__init__方法初始化屬性,也沒有定義例項方法,但是父類有。所以只要建立子類的物件,就預設執行了那個繼承過來的__init__方法

總結:

  • 子類在繼承的時候,在定義類時,小括號()中為父類的名字
  • 父類的屬性、方法,會被繼承給子類

多繼承:子類繼承多個父類

class Master(object):
    def __init__(self):
        self.kongfu = "古法煎餅果子配方"  # 例項變數,屬性

    def make_cake(self):                    # 例項方法,方法
        print("[古法] 按照 <%s> 製作了一份煎餅果子..." % self.kongfu)

    def dayandai(self):
        print("師傅的大煙袋..")

class School(object):
    def __init__(self):
        self.kongfu = "現代煎餅果子配方"

    def make_cake(self):
        print("[現代] 按照 <%s> 製作了一份煎餅果子..." % self.kongfu)

    def xiaoyandai(self):
        print("學校的小菸袋..")

# class Prentice(School, Master):  # 多繼承,繼承了多個父類(School在前)
#     pass

# damao = Prentice()
# print(damao.kongfu)
# damao.make_cake()
# damao.dayandai()
# damao.xiaoyandai()


class Prentice(Master, School):  # 多繼承,繼承了多個父類(Master在前)
    pass

damao = Prentice()
print(damao.kongfu) # 執行Master的屬性
damao.make_cake() # 執行Master的例項方法

# 子類的魔法屬性__mro__決定了屬性和方法的查詢順序
print(Prentice.__mro__)

damao.dayandai() # 不重名不受影響
damao.xiaoyandai()

說明:

  • 多繼承可以繼承多個父類,也繼承了所有父類的屬性和方法
  • 注意:如果多個父類中有同名的 屬性和方法,則預設使用第一個父類的屬性和方法(根據類的魔法屬性mro的順序來查詢)
  • 多個父類中,不重名的屬性和方法,不會有任何影響。