gpt4 book ai didi

python通过返回嵌入式可迭代使类可迭代

转载 作者:太空狗 更新时间:2023-10-29 17:40:56 24 4
gpt4 key购买 nike

我在 python 中有一个类,它有一个可迭代的实例变量。我想通过迭代嵌入的可迭代对象来迭代类的实例。

我是这样实现的:

def __iter__(self):
return self._iterable.__iter__()

我真的不太愿意在可迭代对象上调用 __iter__() 方法,因为它是一种特殊方法。这是用 Python 解决这个问题的方法还是有更优雅的解决方案?

最佳答案

委托(delegate) __iter__ 的“最佳”方式是:

def __iter__(self):
return iter(self._iterable)

或者,可能值得了解:

def __iter__(self):
for item in self._iterable:
yield item

这将让您在退回之前摆弄每个项目(例如,如果您想要 yield item * 2)。

正如@Lattyware 在评论中提到的,PEP380(计划包含在 Python 3.3 中)将允许:

def __iter__(self):
yield from self._iterable

请注意,这样做可能很诱人:

def __init__(self, iterable):
self.__iter__ = iterable.__iter__

但是这不会工作:iter(foo) 调用type(foo) 上的__iter__ 方法> 直接绕过 foo.__iter__。考虑一下,例如:

class SurprisingIter(object):
def __init__(self):
self.__iter__ = lambda self: iter("abc")

def __iter__(self):
return iter([1, 2, 3])

你会期望 list(SurprisingIter()) 会返回 ["a", "b", "c"],但它实际上返回 [1, 2, 3].

关于python通过返回嵌入式可迭代使类可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9573591/

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