我编写了一个非常简单的程序来子类化字典。我想试试__missing__
python中的方法。经过一番研究,我发现在 Python 2 中它可以在defaultdict
. (在 python 3 中,我们使用 collections.UserDict 。)如果找不到密钥,则__getitem__
负责调用该方法。__missing__
当我__getitem__
在以下程序中实施时,我得到一个关键错误,但是当我没有它实施时,我得到了所需的值。
import collections
class DictSubclass(collections.defaultdict):
def __init__(self,dic):
if dic is None:
self.data = None
else:
self.data = dic
def __setitem__(self,key,value):
self.data[key] = value
########################
def __getitem__(self,key):
return self.data[key]
########################
def __missing__(self,key):
self.data[key] = None
dic = {'a':4,'b':10}
d1 = DictSubclass(dic)
d2 = DictSubclass(None)
print d1[2]
我认为我需要实现__getitem__
,因为它负责调用__missing__
. 我知道 defaultdict 的类定义有一个__getitem__
方法。但即便如此,假设我想自己写__getitem__
,我会怎么做?