#coding:utf-8
# 多继承背景下属性查找的顺序:对象-》对象的类-》按照从左往右的顺序一个一个的分支找下去
#
# #第四层
# class I:
# # x='I'
# pass
#
# #第三层
#
# class E:
# # x='E'
# pass
#
# class F(I):
# # x='F'
# pass
#
# class H:
# x='H'
#
# # 第二层
# class B(E):
# # x='B'
# pass
#
# class C(F):
# # x='C'
# pass
#
# class D(H):
# # x='D'
# pass
#
# #第一层
# class A(B,C,D):
# # x='A'
# pass
#
# obj=A()
# # obj.x=111
# print(obj.x)
# 一旦出现菱形继承问题,新式类与经典类在属性查找上的区别是
# 新式类:广度优先查找,在最后一个分支查找顶级类
# 经典类:深度优先查找,在第一个分支就查找顶级类
class G(object):
# def test(self):
# print('from G')
pass
# 第三层
class E(G):
# def test(self):
# print('from E')
pass
class F(G):
def test(self):
print('from F')
pass
# 第二层
class B(E):
# def test(self):
# print('from B')
pass
class C(F):
def test(self):
print('from C')
pass
class D(G):
def test(self):
print('from D')
pass
# 第一层
class A(B,C,D):
# def test(self):
# print('from A')
pass
obj=A()
# obj.test()
# 新式类:对象-》A-》B-》E-》C-》F-》D-G
# 经典类:对象-》A-》B-》E-》G-》C-》F-》D
#在新式类中,提供了一个mro方法
# print(A.mro())