探索super()的执行顺序和__mro__方法

class Base(object):

    def func(self):
        print('Base.func')

class Foo(Base):

    def func(self):
        # 方式一:根据mro的顺序执行方法
        # super(Foo,self).func()
        # 方式二:主动执行Base类的方法
        # Base.func(self)

        print('Foo.func')


obj = Foo()
obj.func()

上述代码单继承,子类中没有func方法会去父类中找。

class Base(object):

    def func(self):
        super(Base, self).func()
        print('Base.func')

class Bar(object):
    def func(self):
        print('Bar.func')

class Foo(Base,Bar):
    pass

# 示例一
# obj = Foo()
# obj.func()
# print(Foo.__mro__)

# 示例二
# obj = Base()
# obj.func()

上述代码,示例一Foo中没有func方法,super()会按照继承顺序,先去Base中找,Base中没有再去Bar中找,所以执行结果为所以super是按照

__mro__继承顺序执行的。

 

 Foo.__mro__的结果为:

 

 如果是示例二,则会报错,应为他的父类中没有相关方法。

 

posted on 2019-12-03 21:26  不要挡着我晒太阳  阅读(268)  评论(0编辑  收藏  举报

导航