python的super的疑问

image.png

class Base(object):
    def func_1(self):
        print('this is base')


class A(Base):
    def func_1(self):
        super().func_1()
        print('this is A')


class B(Base):
    def func_1(self):
        super().func_1()
        print('this is B')


class C(A, B):
    def func_1(self):
        super().func_1()
        print('this is c')


print(C.mro())
C().func_1()

发现自己一直没有弄清楚super,请问为什么会输出base、B、A、C的顺序呢?主要是为什么base后面不是输出A而是B
发现和类的继承顺序正好相反

阅读 2.2k
2 个回答

help(C)

Help on class C in module __main__:

class C(A, B)
 |  Method resolution order:
 |      C
 |      A
 |      B
 |      Base
 |      builtins.object
 |
 |  Methods defined here:
 |
 |  func_1(self)
 |
...

“从左到到右”的意思,C继承关系最近的是A, 然后是B,最后是上层BASE。
调用方法时的入栈顺序是 C A B Base,
出栈顺序是Base B A C,
所以这个输出没什么可迷惑的啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题