我有一堂课,看起来像这样
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__
。