Python-MRO(方法解析顺序)

  1. MRO(方法解析顺序)

MRO(方法解析顺序)

指的是,对一颗类继承树,当调用最底层类对象所对应实例对象的方法时,python解释器在类继承树上搜索方法的顺序。

对于一颗类继承树,有两种方式获取类继承树的MRO
1、使用mro()方法
2、使用特殊属性__mro__

#!/usr/bin/python3

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

class B(A):
    def func(self):
        print('B.func')

class C(A):
    def func(self):
        print('C.func')

class D(B, C):
    def func(slef):
        print('D.func')

print(D.mro())
print(D.__mro__)
print(C.__mro__)
print(B.__mro__)
print(A.__mro__)
[root@lyucan ~]# ./16.py
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]  #列表
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)  #元组
(<class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
(<class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
(<class '__main__.A'>, <class 'object'>)

当向上搜索方法时(无论是重写了的方法还是没有重写的方法),会根据MRO的顺序来进行搜索,例如:如果D没有func()方法, 则会去找B,B没有则会找C,会依次根据MRO去向上寻找,直到找到为止,如果最后object类也没有,则抛出异常。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com