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__
上执行此操作。
感谢
答案 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(...)