2.1. Method Resolution Order¶
2.1.1. Inheritance Method Resolution¶
class A:
def show(self):
print('a')
class B:
def show(self):
print('b')
class C:
def show(self):
print('c')
class D(A, B, C):
pass
obj = D()
obj.show()
# a
print(D.__mro__)
# (<class '__main__.D'>,
# <class '__main__.A'>,
# <class '__main__.B'>,
# <class '__main__.C'>,
# <class 'object'>)
from inspect import getmro
class A:
def show(self):
print('a')
class B:
def show(self):
print('b')
class C:
def show(self):
print('c')
class D(A, B, C):
pass
getmro(D)
# (<class '__main__.D'>,
# <class '__main__.A'>,
# <class '__main__.B'>,
# <class '__main__.C'>,
# <class 'object'>)
2.1.2. Inheritance Diamond¶

Figure 2.54. Inheritance Diamond¶
Inheritance Diamond:
class A:
def show(self):
print('a')
class B(A):
def show(self):
print('b')
class C(A):
def show(self):
print('c')
class D(B, C):
pass
obj = D()
obj.show()
# b
print(D.__mro__)
# (<class '__main__.D'>,
# <class '__main__.B'>,
# <class '__main__.C'>,
# <class '__main__.A'>,
# <class 'object'>)
Inheritance Diamond:
class A:
def show(self):
print('a')
class B(A):
def show(self):
print('b')
class C(A):
def show(self):
print('c')
class E(B):
def show(self):
print('e')
class F(C):
def show(self):
print('f')
class G(E, F):
pass
obj = G()
obj.show()
# e
print(G.__mro__)
# (<class '__main__.G'>,
# <class '__main__.E'>,
# <class '__main__.B'>,
# <class '__main__.F'>,
# <class '__main__.C'>,
# <class '__main__.A'>,
# <class 'object'>)