Python 方法解析顺序MRO(Method Resolution Order)测试

一、问题提出

python支持多继承,当有两个父类A 和 B都有一个方法m时,C类继承了A、B,当调用m的时候,用的是A类的m呢还是B类的m呢?

这个就需要用到方法解析顺序MRO了,目前用的是C3方法。

二、验证

1. 代码

#coding:utf-8

class parent1():
    def __init__(self):
        print("im one")
        super().__init__()
    def show(self):
        print("im one show")

class parent2():
    def __init__(self):
        print("im two")
        #super().__init__()

    def show(self):
        print("im two show")

class child(parent1,parent2):
    def __init__(self):
        super().__init__()

print("MRO:",[x.__name__ for x in child.__mro__])
aa = child()
aa.show()

2.运行结果为:

MRO: ['child', 'parent1', 'parent2', 'object']
im one
im two
im one show

3.分析

MRO路径为: ['child', 'parent1', 'parent2', 'object']

C3方法参考这里:http://c.biancheng.net/view/5450.html

用super()初始化父类构造函数,如果parent1构造函数中没有super().__init__(),那么parent2将不会被初始化到

子类函数的调用根据MRO路径查找

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值