轻松掌握python设计模式之访问者模式


Posted in Python onNovember 18, 2016

本文实例为大家分享了python访问者模式代码,供大家参考,具体内容如下

"""访问者模式"""
class Node(object):
  pass

class A(Node):
  pass

class B(Node):
  pass

class C(A, B):
  pass

class 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)

运行结果如图:

轻松掌握python设计模式之访问者模式

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现颜色rgb和hex相互转换的函数
Mar 19 Python
python自动zip压缩目录的方法
Jun 28 Python
python Django批量导入不重复数据
Mar 25 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
python 调用有道api接口的方法
Jan 03 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
Jun 28 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
Python 依赖库太多了该如何管理
Nov 08 Python
Django继承自带user表并重写的例子
Nov 18 Python
如何通过Django使用本地css/js文件
Jan 20 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 Python
Win10下Python环境搭建与配置教程
Nov 18 #Python
Python Paramiko模块的安装与使用详解
Nov 18 #Python
Python数据分析之真实IP请求Pandas详解
Nov 18 #Python
Python切换pip安装源的方法详解
Nov 18 #Python
Python max内置函数详细介绍
Nov 17 #Python
Python中的日期时间处理详解
Nov 17 #Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 #Python
You might like
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
学习Node.js模块机制
2016/10/17 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
国际花店:Pickup Flowers
2020/04/10 全球购物
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
学校春季防火方案
2014/06/08 职场文书
甜品店创业计划书
2014/08/14 职场文书
社区文艺活动方案
2014/08/19 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
教师师德师风整改措施
2014/10/24 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
Python机器学习之基础概述
2021/05/19 Python
js 数组 fill() 填充方法
2021/11/02 Javascript
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python