Grokking`__missing__`

时间:2017-11-06 15:40:19

标签: python

我遇到了一个' class'在了解str.format_map()时 (Python String format_map()

class Coordinate(dict):
    def __missing__(self, key):
    return key

尝试参数:

In [25]: Coordinate(x='6')
Out[25]: {'x': '6'}

In [26]:  Coordinate(x='6', y='7')
Out[26]: {'x': '6', 'y': '7'}

难以理解的是,x=6既不是dict也不是{'x': '6'}

在官方文档中,它指定:

  

object.__missing__(self, key)   当密钥不在字典中时,由dict.__getitem__()调用以实现dict子类的self[key]

它比之前的示例代码更难。 这里也有很好的答案。

  

dictionary - Python 2 missing method - Stack Overflow

     

Hidden features of Python - Stack Overflow

最后一个答案获得了258个upvotes,这让我非常沮丧,因为我对此一无所知。 可以通过python的基本知识来理解吗?

1 个答案:

答案 0 :(得分:1)

此处与>>> Coordinate(x='6') {'x': '6'} >>> dict(x='6') {'x': '6'} 无关:

__init__

这只是调用dict初始值设定项,因为你继承了dict并且你不能覆盖__missing__

定义>>> c = Coordinate(x='6') >>> c['new_key'] 'new_key' # returns the key, instead of raising KeyError >>> c # note: does not set it in the dict {'x': '6'} 的效果如下所示:

{{1}}