我正在尝试子类化dict
,但在尝试覆盖__getitem__
函数时,我在主题中收到错误。我获得了派生类from this post.
想法是检查密钥是否存在(密钥是2个字符串的元组),如果没有将密钥添加到字典并返回其值。通过在键的连接字符串上调用eval()
来获取字典的值。顺便说一句,我知道默认字典的存在(在这种情况下可能会有所帮助),但我想以不同的方式做到这一点。这是代码
class DictSubclass(dict):
def __init__(self, *args, **kwargs):
self.update(*args, **kwargs)
def __getitem__(self, key):
if not key in dict:
fn = '{}_{}'.format(key[0], key[1])
dict.__setitem__(key,eval(fn))
val = dict.__getitem__(self, key)
return val
def __setitem__(self, key, val):
dict.__setitem__(self, key, val)
def __repr__(self):
dictrepr = dict.__repr__(self)
return '%s(%s)' % (type(self).__name__, dictrepr)
def update(self, *args, **kwargs):
for k, v in dict(*args, **kwargs).items():
self[k] = v
为什么我收到以下错误?
line 21, in __getitem__
if not key in dict:
TypeError: argument of type 'type' is not iterable
答案 0 :(得分:4)
您应该使用if not key in self:
。当if not key in dict:
询问key
是否在类dict
中时,如果类不是可迭代的,则会失败。