Python设计模式之解释器模式原理与用法实例分析


Posted in Python onJanuary 10, 2019

本文实例讲述了Python设计模式之解释器模式原理与用法。分享给大家供大家参考,具体如下:

解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.

下面是一个解释器模式的demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——解释器模式
解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.
"""
#抽象一个解释器类
class AbstractExpression(object):
  def interpreter(self, context):
    pass
#具体解释器——终端 继承抽象解释器
class TerminalExpression(AbstractExpression):
  def interpreter(self, context):
    print "终端解释器",context
#具体解释器——终端 继承抽象解释器
class NotTerminalExpression(AbstractExpression):
  def interpreter(self, context):
    print "非终端解释器",context
class Context(object):
  def __init__(self):
    self.name = ""
if __name__ == "__main__":
  context = Context()
  context.name = 'Andy'
  arr_list = [NotTerminalExpression(),TerminalExpression(),TerminalExpression()]
  for entry in arr_list:
    entry.interpreter(context)

运行结果:

Python设计模式之解释器模式原理与用法实例分析

上面类的设计如下图:

Python设计模式之解释器模式原理与用法实例分析

当有一个语言需要执行,并且可以将该语言的句子表示为抽象语法树时,可使用解释器模式

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python&MongoDB爬取图书馆借阅记录
Feb 05 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
python中的逆序遍历实例
Dec 25 Python
python爬虫使用requests发送post请求示例详解
Aug 05 Python
理解Django 中Call Stack机制的小Demo
Sep 01 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
Jun 05 Python
Django中celery的使用项目实例
Jul 07 Python
详解pandas安装若干异常及解决方案总结
Jan 10 #Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 #Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 #Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 #Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 #Python
Python基础教程之异常详解
Jan 10 #Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 #Python
You might like
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
网友原创的PHP模板类代码
2008/09/07 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
php统计数组元素个数的方法
2015/07/02 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
通过Javascript将数据导出到外部Excel文档的函数代码
2012/06/15 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
python实现指定ip端口扫描方式
2019/12/17 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
python3让print输出不换行的方法
2020/08/24 Python
Exception类的常用方法
2012/06/16 面试题
物业管理计划书
2014/01/10 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
销售提升方案
2014/06/07 职场文书
社区文艺活动方案
2014/08/19 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
党员自我评价范文2015
2015/03/03 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android
Mysql binlog日志文件过大的解决
2021/10/05 MySQL
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android