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]不起作用?在


版权声明:本文为weixin_29526539原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。