Python:python3中__bases__的使用(MRO)

注:尚未在pyhon2中测试
参考文档:https://fishc.com.cn/forum.php?mod=viewthread&tid=48888&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403

· 错误示例

在这里插入图片描述
——————————————————————————————————
在这里插入图片描述

class A():
    def __init__(self):
        self.a=10
    def get_a(self):
        print("我是a")

class B():
    def __init__(self):
        self.b=10
    def get_b(self):
        print("我是b")

B.__bases__ += (A,)
· 正确用法

在这里插入图片描述

class A():
    def __init__(self):
        self.a=10
    def get_a(self):
        print("我是a")

class Before_B():
    pass
class B(Before_B):
    def __init__(self):
        self.b=10
    def get_b(self):
        print("我是b")

print(B.__bases__)
B.__bases__ += (A,)

在这里插入代码片由此可见,使用__bases__时,不继承__init__里的属性,只继承方法;为B类添加A类方法的前提是B是一个继承类,即B.__bases__为(<class ‘main.B的父类’>,)

· 查看继承的类,MRO

使用 print(类名._mro_) 可查看继承的顺序。
参考文档《一窥Python中MRO排序原理》,可以看出是深度优先的原则。
参考文档《多重继承的陷阱:钻石继承(菱形继承)问题》则写着广度优先。
?????
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值