我是靠谱客的博主 含糊电话,这篇文章主要介绍Python 魔法方法(七) __miss__ 无中生有的方法,现在分享给大家,希望可以做个参考。

通常,字典访问一个不存在的键时,会抛错 KeyError。

这样带来的好处是,系统通知我们访问了一个不存在的键,我们回去检查错误的原因。

但是坏处就是,程序运行中断。

想知道有没有这个key,又不想抛错中断,用的最多的就是.get()方法,若key存在,则返回对应的value,若不存在可以指定返回值,默认是None。

好了,有了.get()方法,我们就可以在抛错的边缘疯狂试探了。

 

当我们想一个人,有没有对象,没有的话再给他分配一个。这种情况下,用setdefaul()就可以了。可以直接增加一条属性。

但是我们分配的不仅仅是对象,还是个保镖!多重属性,很霸道有没有!

上例子:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class HaveGirlFriend(dict): def __missing__(self, key): print "into miss" if key == "girl_friend": self[key] = "now have girl friend" self["bodyguard"] = True return self[key] dd = HaveGirlFriend() print dd # {} print dd["boy_firend"] # into miss # None print dd["girl_friend"] # into miss # now have girl firend print dd # {'girl_friend': 'now have girl friend', 'bodyguard': True}

大概就是,有个dd对象,他什么属性都没有,你不问他“有没有女朋友”,就没有女朋友,一问就,马上就有,还多多了个保镖。

当然,你问他“有没有男朋友”,他表示不搞基。

ok,总结一下

1、利用__missing__可以拦截不存在的键值抛错,还可以进行多重属性赋值。

2、dict虽然支持__missing__方法,但dict并没有实现这个方法,要自己定义这个方法。

3、访问字典属性时,先去__getitem__获取,获取不到采取__missing__(如果定义了__missing__方法,否则抛错)。

最后

以上就是含糊电话最近收集整理的关于Python 魔法方法(七) __miss__ 无中生有的方法的全部内容,更多相关Python内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部