问题
你要处理由大量不同类型的对象组成的复杂数据结构,每一个对象都需要需要进行不同的处理。 比如,遍历一个树形结构,然后根据每个节点的相应状态执行不同的操作。
解决方案
这里遇到的问题在编程领域中是很普遍的,有时候会构建一个由大量不同对象组成的数据结构。 假设你要写一个表示数学表达式的程序,那么你可能需要定义如下的类:
关于访问者模式<<pythoncookbook>>里举了数学表达式的例子,并用递归和非递归两种方式实现了求值。
其中用生成器(yield)实现非递归非常巧妙,也对生成器的理解更深了。
为了加强理解,同样用递归和非递归2种方式实际了多叉树的前序和后序遍历,代码如下:
__author__ = 'zhangxa' import types class Node: pass class Branch(Node): def __init__(self,children): assert children is not None and isinstance(children,list) self.children = children def __str__(self): branch_str = 'Branch[' for child in self.children: branch_str += str(child) bra