概述
通常,字典访问一个不存在的键时,会抛错 KeyError。
这样带来的好处是,系统通知我们访问了一个不存在的键,我们回去检查错误的原因。
但是坏处就是,程序运行中断。
想知道有没有这个key,又不想抛错中断,用的最多的就是.get()方法,若key存在,则返回对应的value,若不存在可以指定返回值,默认是None。
好了,有了.get()方法,我们就可以在抛错的边缘疯狂试探了。
当我们想一个人,有没有对象,没有的话再给他分配一个。这种情况下,用setdefaul()就可以了。可以直接增加一条属性。
但是我们分配的不仅仅是对象,还是个保镖!多重属性,很霸道有没有!
上例子:
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 魔法方法(七) __miss__ 无中生有的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复