|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我看了下面这篇小甲鱼先生的帖子
http://bbs.fishc.com/thread-48759-1-1.html
应该说是看懂了。但是有个地方我卡住了。
这里是MRO的顺序
- >>> D.__mro__
- (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
复制代码
请注意这里是先搜索B类在C类之前
这里是例子
- class A():
- def __init__(self):
- print("进入A…")
- print("离开A…")
- class B(A):
- def __init__(self):
- print("进入B…")
- super().__init__()
- print("离开B…")
-
- class C(A):
- def __init__(self):
- print("进入C…")
- super().__init__()
- print("离开C…")
- class D(B, C):
- def __init__(self):
- print("进入D…")
- super().__init__()
- print("离开D…")
- >>> d = D()
- 进入D…
- 进入B…
- 进入C…
- 进入A…
- 离开A…
- 离开C…
- 离开B…
- 离开D…
复制代码
我的问题是当进行到B的时候就应该会出现进入A了啊?B不是顺序在前嘛?B的基类里找到了A就应该被执行了啊?
不是应该B里没有A,C里没有A,才会像这样打印吗?
原贴解释了MRO和C3了, 下方给出了super()的解决方案, 就是对前者概念的实现啦
|
|