本文主要是介绍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=10def get_a(self):print("我是a")class B():def __init__(self):self.b=10def get_b(self):print("我是b")B.__bases__ += (A,)
· 正确用法
class A():def __init__(self):self.a=10def get_a(self):print("我是a")class Before_B():pass
class B(Before_B):def __init__(self):self.b=10def 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排序原理》,可以看出是深度优先的原则。
参考文档《多重继承的陷阱:钻石继承(菱形继承)问题》则写着广度优先。
?????
这篇关于Python:python3中__bases__的使用(MRO)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!