• 首先从使用一个字典开始, 当以d[key] 方式取出一个不存在的值的时候, 会抛出 KeyError 的异常
d = {'a': 1, 'b': 2, 'c': 3}
print(d['a'])
print(d['f'])# >>>>>>>>>>
1
Traceback (most recent call last):File "D:/workspace/example-code/03-dict-set/test.py", line 17, in <module>print(d['f'])
KeyError: 'f'
  • 继承 dict
class NewDict(dict):def __getitem__(self, item):print(f'__getitem__被调用')try:ret = super(NewDict, self).__getitem__(item)print(f'结果为: {ret}')except Exception as e:print(e)raise ereturn retnd = NewDict(a=1, b=2)
print(nd['a'])
# >>>>
__getitem__被调用
结果为: 1
1# >>>>>
print(nd['c'])
__getitem__被调用
Traceback (most recent call last):File "D:/workspace/example-code/03-dict-set/test.py", line 18, in <module>print(nd['c'])File "D:/workspace/example-code/03-dict-set/test.py", line 13, in __getitem__ret = super(NewDict, self).__getitem__(item)
KeyError: 'c'

可以看出在我们使用d[key]方式取值的时候调用的是 getitem 方法,找到不到 key, 抛出 KeyError 异常

  • 实现 __missing__ 方法
class NewDict(dict):def __missing__(self, key):print(f'__missing__被调用')return 1000def __getitem__(self, item):print(f'__getitem__被调用')ret = super(NewDict, self).__getitem__(item)return retnd = NewDict(a=1, b=2)
print(nd['a'])
# >>>>>>>>
__getitem__被调用
1# >>>>>>
print(nd['c'])
__getitem__被调用
__missing__被调用
1000

可以看出当我们实现了 __missing__ 方法, 以d[key] 方式取值. 当有此key的时候,是不会调用 __missing__ 方法, 当 key 不存在的时候, 会调用 __missing__, 并将返回值返回.


官方文档描述

Python __missing__ 魔法方法相关推荐

  1. python __reduce__魔法方法_Python魔法方法指南

    (译)Python魔法方法指南 简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法" ...

  2. Python之魔法方法详解

    转载于: https://pyzh.readthedocs.io/en/latest/python-magic-methods-guide.html 11.1. 简介 本指南归纳于我的几个月的博客,主 ...

  3. Python的魔法方法总结

    转自:http://pyzh.readthedocs.io/en/latest/python-magic-methods-guide.html 原文: http://www.rafekettler.c ...

  4. Python基础--魔法方法()运算符重载)

    文章目录 Python基础--魔法方法()运算符重载) init方法 str方法 Python基础–魔法方法()运算符重载) init方法 class Cat:def hello(self):prin ...

  5. Python基础——魔法方法(一)

    文章目录 魔法方法 构造和析构 算数运算 算数操作符 反运算 增量赋值运算 一元操作符 属性访问 魔法方法 前面在介绍类和对象时,已经接触过Python常用的魔法方法,那么什么是魔法方法呢? 魔法方法 ...

  6. python魔法方法学不懂_深入学习Python之魔法方法

    什么是Python魔法方法 魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现.魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作 ...

  7. 用Python的魔法方法实现扑克牌

    用Python的魔法方法实现扑克牌 """ @author:amgoole @date: 2021/6/26 @email: xwen.xi@icloud.com &qu ...

  8. Python的魔法方法 .

    基本行为和属性 __init__(self[,....])构造函数 . 在实例化对象的时候会自动运行 __del__(self)析构函数 . 在对象被回收机制回收的时候会被调用 __str__(sel ...

  9. python __reduce__魔法方法_非常全的通俗易懂 Python 魔法方法指南(下)

    点击上方"咸鱼学Python",选择"加为星标" 第一时间关注Python技术干货! 作者:Rafe Kettler 翻译:hit9 来源:https://py ...

最新文章

  1. 网络营销——网络营销浅析网站不发文还能维持稳定排名吗?
  2. Spring Cloud【Finchley】-02服务发现与服务注册Eureka + Eureka Server的搭建
  3. 27.4. /etc/bandwidthd.conf
  4. wandb(wb)(weights and biases): 深度学习轻量级可视化工具入门教程
  5. 论“性能需求分析”系列专题(一)之 性能需求剖析
  6. HDOJ杭电2044
  7. 动手学PaddlePaddle(5):迁移学习
  8. 英特尔助力金山云带你畅游云端的游戏世界
  9. html纵向固定导航菜单代码,CSS3单页面垂直固定导航
  10. Kali Linux 网络扫描秘籍 第八章 自动化 Kali 工具
  11. SQL—— Create table as select 与 使用select查询结果创建新表
  12. JavaScript学习总结(3)——JavaScript函数(function)
  13. 为什么部分Android用户不喜欢用iOS系统?
  14. 计算机软件系统测试报告模板,测试报告模板
  15. android 科技感动画,PPT最炫动画,3分钟学会超有科技感的扫描动画,轰动全场!...
  16. 在HTML中实现两个div并排显示
  17. python画地图柱状图_Python 如何画出漂亮的地图?
  18. 深度学习升级打怪之self attention笔记
  19. Python实战一:抓取onenet数据
  20. 利用爬虫有道词典进行翻译python3中的内置函数属性功能

热门文章

  1. 【Vue组件间通信】 全局事件总线、订阅与发布
  2. 许家印:恒大一定能偿还各种债务,化解风险,一定能涅槃重生
  3. .nii格式文件解析
  4. ios swift5 Range转NSRange
  5. C3沙龙北京第十三次活动整理
  6. 泰国选手皮姆斯里-西里卡乌,长得很阳刚
  7. Win2003Server R2安装BlackICE防火墙蓝屏的解决方法
  8. 2014总结_习惯累积沉淀_新浪博客
  9. Codevs P1655 物流运输
  10. Hexo博客设置背景音乐