在自定义类中实现__next__ - python

我有一堂课,看起来像这样

Class myClass:

    def __init__(self, key, value):
        self.key = key
        self.value = value

其中key是字符串,而value始终是myClass元素的列表,可能为空。

我想定义我自己的iter方法,该方法为value.key中的每个value返回values。我试过了

def __iter__(self):
    return self 

def __next__(self):
    try:
        self.value.next().key
    except:
        raise StopIteration

但它永远循环。我究竟做错了什么?
另外,如果我想与Python 2/3兼容,是否应该添加该方法

def next(self):
    return self.__next__()

python大神给出的解决方案

您没有理由实施__next__。您可以使用__iter__返回生成器,该生成器将执行您想要的操作。

class Pair(object):

    def __init__(self, key, value):
        self.key = key
        self.value = value

    def __iter__(self):
        return (v.key for v in self.value)

    # alternative iter function, that allows more complicated logic
    def __iter__(self):
        for v in self.value:
             yield v.key

p = Pair("parent", [Pair("child0", "value0"), Pair("child1", "value1")])

assert list(p) == ["child0", "child1"]

这种处理方式与python2和python3都兼容,因为返回的生成器将在python2中具有必需的next函数,在python3中具有__next__