python mro顺序_简单方法计算Python类的mro (方法解析顺序)

相关概念:

MRO  Method Resolution Order):方法解析顺序。

Python多继承就会涉及到类的继承顺序,虽然我们可以调用类的魔法方法 __mro__打印出来类的继承顺序,但是在我们去面试的时候,大多数是不会给我们一台计算机进行操作的,这里就分享一种快速简单的计算mro顺序的方法!、

1 classA:2 ...3

4 classB(A):5 ...6

7 classC(A):8 ...9

10 classD(B, C):11 ...12

13 classE(C, A):14 ...15

16 classF(D, E):17 ...18

19 classG(E):20 ...21

22 classH(G, F):23 ...24

25

26 print(H.__mro__)

会打印结果:

(, , , , , , , , )

这就是类H的mro顺序!

我的计算方法:

我们虽然很难一下就算出类H的继承顺序,但是我们要算类A、类B、类C的mro顺序便是一眼就能看出来的,然后通过一眼能看出来的顺序,去推断难以看出来的!

1. 类A的 mro:【A, object】

2. 类B的 mro:【B, A, object】

3. 类C的 mro:【C, A, object】

上面三个便是一眼可以看出来的,我们继续向下推,由于 D(B, C),这个继承的先后顺序也是重要的

4. 类D的 mro:【D】+【类B的mro】 + 【类C的mro】,因为类D继承了类B和C,但是这样直接相加两个列表一定是不对的,这里相加的时候有一个规则,就是相同的元素,我们只保留后出现的

重要:相加的时候有一个规则,就是相同的元素,我们只保留后出现的

5. 类D的 mro:【D】+【B, A, object】+ 【C, A, object】,由于有两个相同的类A和类object,我们只保留后面出现的,前面的直接删除,得到结果【D, B, C, A, object】

重要:相加的时候先后顺序一定要和该类继承父类的顺序保持一致,这里D类先继承的B,然后是C,所以相加的时候B在前,C在后,相同元素之保留后面出现的

6. 同理,类E的 mro:【E】+【类C的mro】+【类A的mro】= 【E】+【C, A, object】+【A,object】= 【E,C,A,object】

7. 类F的 mro:【F】+ 【D, B, C, A, object】+【E,C,A,object】=【F,D,B,E,C,A,object】

8. 类G的 mro:【G】+【E,C,A,object】=【G,E,C,A,object】

9. 类H的 mro:【H】+【G,E,C,A,object】+【F,D,B,E,C,A,object】=【H,G, F,D,B,E,C,A,object】

最终可以快速计算出某个类的mro顺序!

如果问我这个方法怎么来的,我也不知道,网上可能有稍微类似点的,看多了总结出来的!如果问这个方法准不准确,那就自己多找几个例子验证一下吧!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值