发布时间:2025-12-09 11:51:04 浏览次数:2
问题:
你构建了一个自定义容器对象,里面包含有列表、元组或其他可迭代对象。你想直接在你的这个新容器对象上执行迭代操作。
解决方案:
实际上你只需要定义一个__iter__()方法,将迭代操作代理到容器内部的对象上去,比如:
class Node: def __init__(self,value): self._value=value self._children=[] def __repr__(self): return 'Node ({!r})'.format(self._value) def add_child(self,node): self._children.append(node) def __iter__(self): return iter(self._children)if __name__=='__main__': root=Node(0) child1=Node(1) child2=Node(2) root.add_child(child1) root.add_child(child2) for ch in root: print(ch)在上面代码中,__item__()方法只是简单的将迭代请求传递给内部的_children属性。
讨论:
python的迭代器协议需要__iter__()方法返回一个实现了__next__()方法的迭代器对象。如果你只是迭代遍历其他容器的内容,就跟len(s)会调用s.__len__()原理是一样的。