菱形问题钻石问题和超继承

菱形问题

class A:
    def play(self):
        print("a is playing")

class B(A):
    def play(self):
        print("b is playing")

class C(A):
    def play(self):
        print("c is playing")

class D(B,C):
    def play(self):
        print('d is playing')

d=D()
d.play()
print(D.__mro__)#查找顺序

输出结果

d is playing
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)

方法解析顺序(Method Resolution Order)
MRO 的顺序基本就是:在避免同一类被调用多次的前提下,使用广度优先和从左到右的原则去寻找需要的属性和方法。
使用 类名.__mro__获得 MRO 的顺序(注:object 是所有类的基类,金字塔的顶端)

超继承

class Phone:
    def call(self):
        print("正在打电话")

class SmartPhone(Phone):
    def call(self):
        # self.caputure_video()
        super().call()    #super()就是调用父类的call()方法

    # def caputure_video(self):
    #     print("正在视频")

smart=SmartPhone()
smart.call()

输出结果

正在打电话
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页