Python设计模式(十五)【访问者模式】
来源:互联网 发布:geekbench mac下载 编辑:程序博客网 时间:2024/05/29 17:38
只要能执着远大的理想,且有不达目的绝不终止的意愿,便能产生惊人的力量。
"""访问者模式"""class Node(object): passclass A(Node): passclass B(Node): passclass C(A, B): passclass Visitor(object): def visit(self, node, *args, **kwargs): meth = None """python支持多重继承,在解析父类的__init__时,定义解析顺序的是子类的__mro__属性,内容为一个存储要解析类顺序的元组。""" """观察到,super的执行路径和类的__mro__列举的类顺序吻合;而__mro__的顺序可以看作是深搜的结果""" for cls in node.__class__.__mro__: """方法名""" meth_name = 'visit_' + cls.__name__ """getattr()函数是Python自省的核心函数,具体使用大体如下: 获取对象引用getattr,Getattr用于返回一个对象属性,或者方法 如果Visitor对象中有属性meth_name则获得方法返回的值,否则赋值None """ meth = getattr(self, meth_name, None) if meth: break if not meth: meth = self.generic_visit return meth(node, *args, **kwargs) def generic_visit(self, node, *args, **kwargs): print('通常访问: ' + node.__class__.__name__) def visit_B(self, node, *args, **kwargs): print('访问_B ' + node.__class__.__name__)a = A()b = B()c = C()visitor = Visitor()visitor.visit(a)visitor.visit(b)visitor.visit(c)
运行结果如图:
0 0
- Python设计模式(十五)【访问者模式】
- 十五、访问者设计模式
- 设计模式笔记二十五:访问者模式
- Android设计模式(十五)-访问者模式
- python设计模式(访问者模式)
- 设计模式学习系列十五:访问者模式(Visitor)
- Java设计模式之二十五(访问者模式)
- 设计模式之十五:访问者模式(Visitor Pattern)
- python设计模式之访问者模式
- 设计模式-访问者模式-visitor-python
- python设计模式之访问者模式
- 设计模式 访问者模式
- 设计模式 - 访问者模式
- 设计模式:访问者模式
- 设计模式 - 访问者模式
- 设计模式 - 访问者模式
- 设计模式------------访问者模式
- 设计模式:访问者模式
- Android中ListView或者GridView的Item和Item中控件的事件冲突
- 《JAVA与模式》之观察者模式
- java redis使用之利用jedis实现redis消息队列
- Oracle学习笔记之AWR报告分析
- android如何查看手机中的db文件,查看sqlite数据库的表结构
- Python设计模式(十五)【访问者模式】
- EBTABLES手册
- 批处理延时启动的几个方法
- 股票应用开发——图表的绘制(三)
- spring quartz当时触发器
- js中如何获取地址栏的参数值
- 【Node.js】初始化工程时加载全部的node_modules
- CherGet(网站数据采集)v3.3官方版
- leetcode- Preorder/Inorder/PostOrder without Recursive