python中关于super()函数,多继承的调用举例

本文详细解释了如何在Python中使用super()函数,特别关注其按照MethodResolutionOrder(MRO)的调用顺序,通过C类继承A和B类的实例,展示了不同super()调用方式对test方法选择的影响。
摘要由CSDN通过智能技术生成

super() 函数的调用是按照mro的解析顺序,可以参考下面的代码

import inspect

class A:
    def test(self):
        print('A')


class B:
    def test(self):
        print('B')


class C(A, B):
    def __init__(self):
        print(inspect.getmro(C))  # 查看mro的解析顺序
        super().test()  # 调用A类中的test方法
        super(C, self).test()  # 调用A类中的test方法
        super(A, self).test()  # 调用B类中的test方法


C()

运行结果如下

(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
A
A
B

代码解释

1.super().test()调用的是MRO中当前类之后的第一个test方法,也就是A中的test方法,打印A。
2.super(C, self).test()这里再次指定从C的视角开始查找下一个test方法,依然找到的是A中的test方法,因此也打印A。
3.super(A, self).test()在这里,指定从A的视角开始查找下一个test方法,按照MRO,下一个是B中的test方法,因此打印B

ps:mro学习可以参考这篇文章 C3 线性化算法与 MRO - Kaiyuan's Blog | May the force be with me

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值