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

概述

通常,字典访问一个不存在的键时,会抛错 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__ 无中生有的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部