python中items返回的类型_iter()返回了“dict_items”类型的非迭代器

这让我发疯了。下面是一个class我正在处理的问题,目标是找到一种支持动态属性分配的方法。请暂时忘记这个糟糕的实现,或者我为什么不使用字典,我知道还有其他方法可以做到这一点(例如Enum),但这是我以前的测试代码,现在它成了我寻找它为什么不起作用的任务。在class Family(object):

def children(self):

return self.__dict__.values()

def __setitem__(self, key, value):

self.__dict__[key] = value

def __getitem__(self, item):

return self.__dict__[item]

def __repr__(self):

return str(self.__dict__)

def __iter__(self):

return self.__dict__.items()

这一切似乎都很好,我启动了一个测试对象,如下所示:

^{pr2}$

现在预期的结果是[('a', 'foo'), ('b', 'bar')],但我得到的却是:TypeError: iter() returned non-iterator of type 'dict_items'

我想我可能搞错了__iter__方法,所以我检查了如下内容:type(foo.__iter__())

#

type(foo.__dict__.items())

#

[i for i in foo.__dict.__items()]

# [('a', 'foo'), ('b', 'bar')]

foo.__dict__.items() == foo.__iter__()

# True

如果它们都是相同的,为什么[i for i in foo]不起作用?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值