1. 程式人生 > 實用技巧 >面向物件--子類重寫父類的同名屬性和方法

面向物件--子類重寫父類的同名屬性和方法

子類重寫父類的同名屬性和方法


class Master(object):
    def __init__(self):
        self.kongfu = "古法煎餅果子配方" 

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


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

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


class Prentice(School, Master):  # 多繼承,繼承了多個父類
    def __init__(self):
        self.kongfu = "貓氏煎餅果子配方"

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


# 如果子類和父類的方法名和屬性名相同,則預設使用子類的
# 叫 子類重寫父類的同名方法和屬性
damao = Prentice()
print(damao.kongfu) # 子類和父類有同名屬性,則預設使用子類的
damao.make_cake() # 子類和父類有同名方法,則預設使用子類的

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

劇情發展:

大貓的新配方大受歡迎,但是有些顧客希望也能吃到古法配方和 現代配方 的煎餅果子...(子類呼叫父類的同名屬性和方法)