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

时间:2010-01-02 00:25:15

标签: 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)

为什么会在self.__class__.__missing__上执行此操作。

感谢

2 个答案:

答案 0 :(得分:6)

提交的UserDict.py here密切模仿内置dict,例如:

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

就像你可以覆盖特殊方法__missing__来处理内置dict的子类时丢失的键一样,所以当你继承UserDict时,你可以覆盖它。 / p>

dict的官方Python文档是here,他们确实说:

  

2.5版中的新功能:如果是。的子类   dict定义了一个方法__missing__(),   如果密钥不存在,则   d[key]操作调用该方法   用键键作为参数。该   d[key]操作然后返回或   提出任何返回或提出的东西   通过__missing__(key)来电   钥匙不存在。没有其他   操作或方法调用   __missing__()。如果未定义__missing__(),则会引发KeyError。   __missing__()必须是一种方法;它不能是实例变量。为   例如,请参阅collections.defaultdict

答案 1 :(得分:0)

如果你想在字典中使用默认值(又名 __缺少__ ),你可以从集合模块中查看defaultdict

getContentResolver().query(...)