子类化dict导致错误TypeError: argument of type 'type' is not iterable
我正在尝试创建一个新的字典类,但在重写 __getitem__
函数时遇到了错误。这个新类的初始实现是从这篇帖子中获得的。
我的想法是检查一个键是否存在(这个键是由两个字符串组成的元组),如果不存在,就把这个键添加到字典中并返回它的值。字典的值是通过对键的字符串进行拼接后调用 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
1 个回答
4
你应该用 if not key in self:
。因为 if not key in dict:
是在问这个 key
是否在类的 dict
里面,而类本身是不能像列表那样一个个遍历的,所以会出错。