轻松掌握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定时执行指定函数的方法
May 27 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
Jan 18 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
面向初学者的Python编辑器Mu
Oct 08 Python
pycharm重命名文件的方法步骤
Jul 29 Python
Django 通过JS实现ajax过程详解
Jul 30 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
Python3如何实现Win10桌面自动切换
Aug 11 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
python之PySide2安装使用及QT Designer UI设计案例教程
Jul 26 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
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
2018/08/13 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python类继承用法实例分析
2014/10/10 Python
Python中的__slots__示例详解
2017/07/06 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
Python request中文乱码问题解决方案
2020/09/17 Python
python 对xml解析的示例
2021/02/27 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
Shell编程面试题
2016/05/29 面试题
为什么要用EJB
2014/04/17 面试题
销售顾问岗位职责
2014/02/25 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
社区义诊活动总结
2014/04/30 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
交通事故起诉书
2015/05/19 职场文书
单位政审意见范文
2015/06/04 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
导游词之塘栖古镇
2019/12/04 职场文书
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL