5、在多继承背景下的属性查找

#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())

猜你喜欢

转载自www.cnblogs.com/z-x-y/p/10047434.html