Python的方法解析顺序(MRO)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python的方法解析顺序(MRO)相关的知识,希望对你有一定的参考价值。

mro即method resolution order,主要用于在多继承时判断调的属性的路径(来自于哪个类)。

http://blog.csdn.net/imzoer/article/details/8737642

 

你真的理解Python中MRO算法吗?

 API:

 1 class type(object):
 2     """
 3     type(object) -> the object‘s type
 4     type(name, bases, dict) -> a new type
 5     """
 6     def mro(self): # real signature unknown; restored from __doc__
 7         """
 8         mro() -> list
 9         return a type‘s method resolution order
10         """
11         return []

 

测试代码:

 1 #!/usr/bin/env python
 2 class A(object):
 3     def __init__(self):
 4         print "enter A"
 5         print("leave A")
 6 
 7 
 8 class B(object):
 9     def __init__(self):
10         print "enter B"
11         print "leave B"
12 
13 
14 class C(A,B):
15     def __init__(self):
16         print "enter C"
17         super(C, self).__init__()
18         print "leave C"
19 
20 b = C()
21 mo = b.__class__.mro()
22 print mo

 

输出:

enter C
enter A
leave A
leave C
[<class ‘__main__.C‘>, <class ‘__main__.A‘>, <class ‘__main__.B‘>, <type ‘object‘>]





以上是关于Python的方法解析顺序(MRO)的主要内容,如果未能解决你的问题,请参考以下文章

多重继承方法或属性调用顺序(MRO)

Python的多继承问题-MRO和C3算法

Python入门精华-OOP调用父类的方法及MRO方法解析序列

Python-MRO

python的MRO算法

Python高级语法-多继承MRO相关-多继承顺序(4.5.1)