欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

委托迭代

程序员文章站 2022-03-15 19:42:14
...

构建了一个自定义容器对象,里面包含有列表、元组或其他可迭代对象。 想直接在这个新容器对象上执行迭代操作。只需要定义一个 _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)

# Example
if __name__ == '__main__':
    root = Node(0)
    child1 = Node(1)
    child2 = Node(2)
    root.add_child(child1)
    root.add_child(child2)
    # Outputs Node(1), Node(2)
    for ch in root:
        print(ch)

Python的迭代协议要求_iter_()返回一个特殊的迭代器对象,由该对象实现的\—next()方法来完成世纪的迭代。上述脚本所要做的只是转发迭代请求,所以不关注底层细节是如何工作的。

相关标签: 迭代器