现在自定义一个容器对象,其内含有列表、元组或其他可迭代对象。只需定义一个__iter()__方法,将迭代操作代理到容器内部的对象上去,即满足__iter()__方法返回一个实现了__next__()方法的迭代器对象。

    1. class Node:
    2. def __init__(self, value):
    3. self._value = value
    4. self._children = []
    5. def __repr__(self):
    6. return f"Node({self._value})"
    7. def add_child(self, node):
    8. self._children.append(node)
    9. def __iter__(self):
    10. # 定义__iter__实际调用了列表的__iter__()方法,因此变成一个可迭代对象
    11. return self._children.__iter__()
    12. nodes = Node(0)
    13. node1 = Node(1)
    14. node2 = Node(2)
    15. nodes.add_child(node1)
    16. nodes.add_child(node2)
    17. for node in nodes:
    18. print(node) # Node(1) Node(2)