在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__.
谢谢
这里介绍的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.
| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |