子类化dict导致错误TypeError: argument of type 'type' is not iterable

0 投票
1 回答
1662 浏览
提问于 2025-04-20 00:23

我正在尝试创建一个新的字典类,但在重写 __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 里面,而类本身是不能像列表那样一个个遍历的,所以会出错。

撰写回答