super()理解之砖石继承

一、钻石继承:

什么是钻石继承呢?举个例子,其中A是顶级父类,B1和B2是次父类 ,C是继承了B1和B2。掌握了这些对于后面刷题,可以更好的理解super.()函数方法。

class A:
    def __init__(self):
        print("我是A")
class B1(A):
    def __init__(self):
        A.__init__(self)
        print("我是B1")
class B2(A):
    def __init__(self):
        A.__init__(self)
        print("我是B2")
class C(B1,B2):
    def __init__(self):
        B1.__init__(self)
        B2.__init__(self)
        print("我是C")
c=C()

其中A是顶级父类,B1和B2是次父类 ,C是继承了B1和B2。

其输出的结果:

我是A
我是B1
我是A
我是B2
我是C

二、super()向上搜索指定的父类方法。

上一个的输出结果里面有一个A是重复使用了,为了解决这个问题,就可以使用super()函数,自动向上搜索父类的方法,这样就可以在实例化C的时候,向上搜索父类的话就会避免掉将重复的父类.__init__()方法执行出来。super()函数的用途之一就是向上搜索指定的某个父类方法。然后就可以扩展到任意的方法了。

class A:
    def __init__(self):
        print("我是A")
class B1(A):
    def __init__(self):
        super().__init__()#向上搜索父类
        print("我是B1")
class B2(A):
    def __init__(self):
        super().__init__()
        print("我是B2")
class C(B1,B2):
    def __init__(self):
        super().__init__()
        print("我是C")
c=C()

运行结果为:

我是A
我是B2
我是B1
我是C

 三、super().自定义的方法名

为了方便大家的理解,我将继续用上的里给大家讲解。

class A:
    def hello(self):
        print("我是A")
class B1(A):
    def hello(self):
        super().hello()
        print("我是B1")
class B2(A):
    def helolo(self):
        super().hello()
        print("我是B2")
class C(B1,B2):
    def __init__(self):
        super().hello()
        print("我是C")
c=C()

输出结果仍然是:

我是A
我是B1
我是C

 

我的分享到此结束,谢谢我的记录对你的学习会有帮助。

 

你可能感兴趣的:(python类和对象,python,开发语言)