gpt4 book ai didi

python - 在自定义类中实现 __next__

转载 作者:行者123 更新时间:2023-11-28 21:52:16 24 4
gpt4 key购买 nike

我有一个看起来像这样的类

Class myClass:

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

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

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

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__()

最佳答案

您没有理由实现__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__

关于python - 在自定义类中实现 __next__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28661014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com