您的位置:首页 > 编程语言 > Python开发

Python:python3中__bases__的使用(MRO)

2020-02-17 04:57 399 查看

注:尚未在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排序原理》,可以看出是深度优先的原则。
参考文档《多重继承的陷阱:钻石继承(菱形继承)问题》则写着广度优先。
?????

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Xingzi_c 发布了4 篇原创文章 · 获赞 0 · 访问量 269 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: