我正在尝试将一个自定义类从python2移植到python3。我找不到正确的语法来为类移植迭代器。下面是一个真实类的MVCE,以及我目前解决这个问题的尝试:
使用Python 2代码:class Temp:
def __init__(self):
self.d = dict()
def __iter__(self):
return self.d.iteritems()
temp = Temp()
for thing in temp:
print(thing)
在上面的代码中,iteritems()在python3中中断。根据this高投票率的回答,“dict.items现在做dict.iteritems在Python2中所做的事情”。所以我下一步尝试了:
^{pr2}$
上面的代码生成“TypeError: iter() returned non-iterator of type 'dict_items'”
根据this答案,除了iter方法之外,python3还需要iterable对象提供next()方法。好吧,字典也是iterable的,所以在我的用例中,我应该能够传递dictionary的next和iter方法,对吗?在class Temp:
def __init__(self):
self.d = dict()
def __iter__(self):
return self.d.__iter__
def next(self):
return self.d.next
这次它给了我“TypeError: iter() returned non-iterator of type 'method-wrapper'”。在
我错过了什么?在