example17.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. """
  2. 多重继承 - 一个类有两个或者两个以上的父类
  3. MRO - 方法解析顺序 - Method Resolution Order
  4. 当出现菱形继承(钻石继承)的时候,子类到底继承哪个父类的方法
  5. Python 2.x - 深度优先搜索
  6. Python 3.x - C3算法 - 类似于广度优先搜索
  7. """
  8. class A():
  9. def say_hello(self):
  10. print('Hello, A')
  11. class B(A):
  12. pass
  13. class C(A):
  14. def say_hello(self):
  15. print('Hello, C')
  16. class D(B, C):
  17. pass
  18. class SetOnceMappingMixin():
  19. """自定义混入类"""
  20. __slots__ = ()
  21. def __setitem__(self, key, value):
  22. if key in self:
  23. raise KeyError(str(key) + ' already set')
  24. return super().__setitem__(key, value)
  25. class SetOnceDict(SetOnceMappingMixin, dict):
  26. """自定义字典"""
  27. pass
  28. def main():
  29. print(D.mro())
  30. # print(D.__mro__)
  31. D().say_hello()
  32. print(SetOnceDict.__mro__)
  33. my_dict= SetOnceDict()
  34. my_dict['username'] = 'jackfrued'
  35. my_dict['username'] = 'hellokitty'
  36. if __name__ == '__main__':
  37. main()