Python类添加迭代器的如下实现方案是否正确?
问题解答
你目前对F类的修改完全可以满足需求场景,不会引发无限循环,现有实现的运行逻辑是自洽的。
为什么不会出现无限循环
你定义的self._it = (self,)是一个仅包含当前F类实例的固定长度元组,__iter__方法中返回的是这个元组自身的迭代器。元组迭代器的运行逻辑只会按顺序遍历元组内的元素,遍历到最后一个元素后就会自动终止迭代,不会递归调用F类的__iter__方法,因此完全不存在无限循环的风险。
实现可正常运行的原因
你原有的业务逻辑是遍历aClass实例时,拿到的每一个元素都是F类实例,正好适配doSomething的入参要求。现在你给F类实现的迭代逻辑,就是遍历F实例时仅返回它自身,当aClass=F时,for f in A拿到的f就是这个F实例本身,和原有逻辑的输出格式完全对齐,所以可以无缝兼容原来的代码逻辑。
可选优化建议
你不需要额外定义self._it实例成员,直接在__iter__方法中返回iter((self,))即可,这样可以减少不必要的实例属性占用,代码更简洁:
class F(): def __init__(self): # 原有代码 ... def __iter__(self): return iter((self,))
如果你的业务场景中不会对遍历拿到的f再做二次迭代,上面的实现就完全满足要求。
内容的提问来源于stack exchange,提问作者user3646557
相关产品推荐
相关产品推荐

