轻松掌握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编程时利用wxPython来支持多线程的方法
Apr 07 Python
Django实现图片文字同时提交的方法
May 26 Python
python MySQLdb使用教程详解
Mar 20 Python
Python加载带有注释的Json文件实例
May 23 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
浅谈Python traceback的优雅处理
Aug 31 Python
Python将json文件写入ES数据库的方法
Apr 10 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
Python 随机按键模拟2小时
Dec 30 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
Jan 08 Python
Django REST framework 限流功能的使用
Jun 24 Python
Python中with上下文管理协议的作用及用法
Mar 18 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
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
keras中的卷积层&池化层的用法
2020/05/22 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
24个canvas基础知识小结
2014/12/17 HTML / CSS
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
大学生毕业求职自荐书范文
2014/02/04 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
经济贸易系求职信
2014/08/04 职场文书
党的生日活动方案
2014/08/15 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
学校标语口号大全
2015/12/26 职场文书
php实例化对象的实例方法
2021/11/17 PHP