子类化dict导致错误TypeError:类型'类型'的参数是不可迭代的

时间:2014-09-05 10:26:57

标签: python python-3.x dictionary typeerror

我正在尝试子类化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

1 个答案:

答案 0 :(得分:4)

您应该使用if not key in self:。当if not key in dict:询问key是否在类dict中时,如果类不是可迭代的,则会失败。