87.子类重写父类的同名属性和方法

子类重写父类的同名属性和方法

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__)

剧情发展:

大猫的新配方大受欢迎,但是有些顾客希望也能吃到古法配方和 现代配方 的煎饼果子...(子类调用父类的同名属性和方法)

# 古法师傅类
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):
        print("School")
        # 配方
        self.kongfu = "现代配方"

    # 自定义
    # 制作煎饼果子
    def make_cake(self):
        print("按照<%s>制作煎饼果子" % self.kongfu)

    # 自定义
    # 小烟袋
    def xiaoyandai(self):
        print("小烟袋")

# 自定义一个徒弟类
class Prentice(Master, School):

    # 重写
    def __init__(self):
        # 配方
        self.kongfu = "猫式配方"
    # 重写
    # 制作煎饼果子
    def make_cake(self):
        print("按照<%s>制作煎饼果子" % self.kongfu)


# 徒弟
dm = Prentice()
dm.dayandai()
dm.xiaoyandai()
print(dm.kongfu)
dm.make_cake()
# dm.test()
# 继承链
# (<class '__main__.Prentice'>, <class '__main__.Master'>, <class '__main__.School'>, <class 'object'>)
# 查看这个对象调用方法的的顺序
print(Prentice.__mro__)

"""
如果子类继承了父类(无论单继承还是多继承)
假如父类的方法名和子类不同
    - 子类会全部继承
假如父类的方法名和子类相同
    - 子类会使用其自己类方法
为什么子类会调用自己本身的属性?
    - 子类先使用了自己本身的init方法
"""

 

posted @ 2020-05-11 18:15  kelin1  阅读(1034)  评论(0编辑  收藏  举报