类的继承顺序.py 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # class A:
  2. # pass
  3. # class B(A):
  4. # pass
  5. # class C(B):
  6. # pass
  7. # print(C.__mro__)
  8. # print(B.__mro__)
  9. # print(A.__mro__)
  10. class A(object):
  11. def test(self):
  12. print('from A')
  13. class B(A):
  14. def test(self):
  15. print('from B')
  16. class C(A):
  17. def test(self):
  18. print('from C')
  19. class D(B):
  20. def test(self):
  21. print('from D')
  22. class E(C):
  23. def test(self):
  24. print('from E')
  25. class F(D,E):
  26. def test(self):
  27. print('from F')
  28. f1=F()
  29. f1.test()
  30. print(F.__mro__) #只有新式才有这个属性可以查看线性列表,经典类没有这个属性
  31. # 新式类继承顺序:F->D->B->E->C->A
  32. # 经典类继承顺序:F->D->B->A->E->C
  33. # python3中统一都是新式类
  34. # pyhon2中才分新式类与经典类
  35. # 所有的父类的MRO列表遵循如下原则:
  36. # 子类会先于父类被检查;多个父类会根据它们在列表中的顺序被检查;如果对下一个类存在两个合法的选择,则选择第一个类。