轻松掌握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 相关文章推荐
pyqt4教程之messagebox使用示例分享
Mar 07 Python
python实现的二叉树算法和kmp算法实例
Apr 25 Python
Python实例分享:快速查找出被挂马的文件
Jun 08 Python
Python设计模式之抽象工厂模式
Aug 25 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
Python使用三种方法实现PCA算法
Dec 12 Python
PyCharm安装Markdown插件的两种方法
Jun 24 Python
python opencv 图像拼接的实现方法
Jun 27 Python
Python的历史与优缺点整理
May 26 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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
编写PHP的安全策略
2006/10/09 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
从零学python系列之从文件读取和保存数据
2014/05/23 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
xxx同志考察材料
2014/02/07 职场文书
租赁协议书范本
2014/04/22 职场文书
安全教育月活动总结
2014/05/05 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
三八妇女节寄语
2015/02/27 职场文书
道歉信范文
2015/05/12 职场文书
歌舞青春观后感
2015/06/10 职场文书
使用MybatisPlus打印sql语句
2022/04/22 SQL Server