什么是'self .__ class __.__ missing__'是什么意思

zjm*_*126 1 python pinax

在pinax Userdict.py中:

def __getitem__(self, key):
        if key in self.data:
            return self.data[key]
        if hasattr(self.__class__, "__missing__"):
            return self.__class__.__missing__(self, key)
Run Code Online (Sandbox Code Playgroud)

为什么这样做呢self.__class__.__missing__.

谢谢

Ale*_*lli 6

这里介绍的UserDict.py 模拟内置dict紧密,例如:

>>> class m(dict):
...   def __missing__(self, key): return key + key
... 
>>> a=m()
>>> a['ciao']
'ciaociao'
Run Code Online (Sandbox Code Playgroud)

就像你__missing__在子类化内置时可以覆盖特殊方法来处理丢失的键一样dict,所以你可以在子类化时覆盖它UserDict.

dict的官方Python文档在这里,他们说:

版本2.5中的新增内容:如果dict的子类定义了method __missing__(),则如果不存在键键,则 d[key]操作将使用键键作为参数调用该方法.该 d[key]操作然后返回或引发任何退回或募集的__missing__(key)通话如果该键不存在.没有其他操作或方法调用 __missing__().如果__missing__()未定义,KeyError则引发. __missing__()必须是一种方法; 它不能是实例变量.有关示例,请参阅collections.defaultdict.