example10.py 944 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. """
  2. 混入 - Mix-in
  3. 限制字典只有在指定的key不存在时才能设置键值对
  4. 原则上能够不使用多重继承的地方都不要用多重继承
  5. MRO - Method Resolution Order - 方法解析顺序
  6. Python2 - 深度优先搜索
  7. Python3 - 类似于广度优先搜索 - C3算法
  8. 类.__mro__ / 类.mro()
  9. """
  10. class SetOnceMappingMixin():
  11. """混入类"""
  12. __slots__ = ()
  13. def __setitem__(self, key, value):
  14. if key in self:
  15. raise KeyError(f'键{str(key)}已经存在')
  16. return super().__setitem__(key, value)
  17. class SetOnceDict(SetOnceMappingMixin, dict):
  18. """自定义字典"""
  19. pass
  20. def main():
  21. """主函数"""
  22. dict1 = SetOnceDict()
  23. try:
  24. dict1['username'] = 'jackfrued'
  25. dict1['username'] = 'hellokitty'
  26. dict1['username'] = 'wangdachui'
  27. except KeyError as error:
  28. print('Error:', error)
  29. print(dict1)
  30. if __name__ == '__main__':
  31. main()