2010-01-02 80 views
0

在pinax Userdict.py:什麼是 '自我.__類__.__ missing__' 意味着

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__

感謝

回答

4

的UserDict.py呈現內置dict密切here模擬,因此,例如:

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

就像你可以覆蓋特殊的方法__missing__當你繼承處理丟失的鑰匙內置的dict,所以你可以覆蓋它,當你的子類UserDict

的字典官方的Python文檔是here,和他們做說:

新版本2.5:如果 字典的一個子類定義的方法__missing__(), 如果鍵鍵不存在,操作調用該方法 並將鍵密鑰作爲參數。 d[key]操作然後返回或 如果 密鑰不存在則引發__missing__(key)調用返回或提出 。沒有其他 操作或方法調用 __missing__()。如果未定義__missing__(),則引發KeyError__missing__()必須是一種方法;它不能是一個實例變量。對於 示例,請參閱collections.defaultdict

0

如果你想使用默認值的字典(又名__missing__),你可以從收集模塊退房defaultdict

from collections import defaultdict 

a = defaultdict(int) 

a[1] # -> 0 
a[2] += 1 
a # -> defaultdict(int, {1: 0, 2: 1})