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