python中你不知道的多继承

前些天朋友给了我一大串代码,让我猜猜输出结果,我想着,行呗,试试就试试。结果大失所望。
在这里插入图片描述
宝宝心里苦啊~~~,呜呜呜

给你们看看代码吧。

class A():
    def __init__(self):
        print('A开始')
        print('A结束')

class  B(A):
    def  __init__(self):
        print('B开始')
        super().__init__()
        print('B结束')

class C(A):
    def  __init__(self):

        print('C开始')
        super().__init__()
        print('C结束')

class D(B,C):
    def  __init__(self):
        print('D开始')
        super().__init__()
        print('D结束')


d=D()
print(D.mro())

其实它就是python中类的多继承,那么多继承有什么规则呢?

#比如:
class A():
	pass
class B():
	pass
class C(A,B):
	pass
class D(B,A):
	pass
		

在上面,A和B显然是父类,C和D显然是子类,但是C和D又分别继承了A和B,那你们猜一猜如果以上的父类和子类下有方法的话,那么调用C和D(假如说分别调用了父类的方法)会出现什么结果呢?
答案是毋庸置疑的,会根据子类里面的继承顺序进行继承,C类继承的是A和B,那么如果同时调用父类的方法,他是会先调用父类A中的方法再调用父类B中的方法。你们下去可以试一试,把代码补全,然后调用类看输出结果。

好了,回到我们上面的那个问题。上面代码的输出结果是:
在这里插入图片描述你有没有猜对呢?
我刚才给大家说了一下多继承的顺序,你们再往回看是不是有点懵呢?哈哈哈,这才是我想要的结果。
多继承的顺序确实是有先后规则的,但是mro表默认给了类的调用顺序,所以类的普通继承顺序就不好用了。
明白了吗?

MRO表是一种多重继承中用于确定方法搜索顺序的算法,又称C3超类线性话。python会计算出每一类的MRO列表。一个类的 MRO 列表是一个包含了其继承链上所有基类的线性顺序列,并且列表中的每一项均保持唯一。当需要在继承链中寻找某个属性时,Python会在 MRO 列表中从左到右开始查找各个基类,直到找到第一个匹配这个属性的类为止。

MRO列表遵循以下三条规则:

  • 子类会先于父类被检查
  • 多个父类会根据他们在列表中的顺序被检查。
  • 如果对下一个类存在两个合法的选择, 选择第一个父类。

python中的相关属性:
class.mro():这个打印出的是多继承类中的继承顺序表,他的数据类型是一个列表。
class.mro:这个和上面的意义是一样的,不过他的数据类型是一个元组。

好了,现在你明白了吗?赶快下去试一试吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值