代理迭代__iter__()方法

实际上你只需要定义一个__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)

在上面代码中,__iter__()方法只是简单的将迭代请求传递给内部的_children属性。

Python的迭代器协议需要__iter__()方法返回一个实现了__next__()方法的迭代器对象。如果你只是迭代遍历其他容器的内容,你无须担心底层是怎样实现的。你所要做的只是传递迭代请求既可。

这里的iter()函数的使用简化了代码,iter(s)只是简单的通过调用s.__iter__()方法来返回对应的迭代器对象,就跟len(s)会调用s.__len__()原理是一样的。

未经允许不得转载:惠生活366 » 代理迭代__iter__()方法

赞 (0) 打赏