现在自定义一个容器对象,其内含有列表、元组或其他可迭代对象。只需定义一个__iter()__
方法,将迭代操作代理到容器内部的对象上去,即满足__iter()__
方法返回一个实现了__next__()
方法的迭代器对象。
class Node:
def __init__(self, value):
self._value = value
self._children = []
def __repr__(self):
return f"Node({self._value})"
def add_child(self, node):
self._children.append(node)
def __iter__(self):
# 定义__iter__实际调用了列表的__iter__()方法,因此变成一个可迭代对象
return self._children.__iter__()
nodes = Node(0)
node1 = Node(1)
node2 = Node(2)
nodes.add_child(node1)
nodes.add_child(node2)
for node in nodes:
print(node) # Node(1) Node(2)