我有一堂课看起来像这样
Class myClass:
def __init__(self, key, value):
self.key = key
self.value = value
Run Code Online (Sandbox Code Playgroud)
其中key是一个字符串,并且value始终是 myClass 的元素列表,可能为空。
我想定义我自己的 iter 方法,该方法返回value.key每个valuein values。我试过
def __iter__(self):
return self
def __next__(self):
try:
self.value.next().key
except:
raise StopIteration
Run Code Online (Sandbox Code Playgroud)
但它永远循环。我究竟做错了什么?另外,如果我想具有 Python 2 / 3 兼容性,我应该添加该方法吗
def next(self):
return self.__next__()
Run Code Online (Sandbox Code Playgroud)
你没有理由去实施__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"]
Run Code Online (Sandbox Code Playgroud)
这种处理方式与 python2 和 python3 兼容,因为返回的生成器将具有nextpython2 和__next__python3 中所需的函数。
| 归档时间: |
|
| 查看次数: |
2148 次 |
| 最近记录: |