这让我发疯了。下面是一个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]不起作用?在