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批量修改文件名的实现代码
Sep 01 Python
为Python的web框架编写MVC配置来使其运行的教程
Apr 30 Python
Python新手入门最容易犯的错误总结
Apr 24 Python
python 垃圾收集机制的实例详解
Aug 20 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
Python2/3中urllib库的一些常见用法
Dec 19 Python
Python之时间和日期使用小结
Feb 14 Python
Python下应用opencv 实现人脸检测功能
Oct 24 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
jupyter 导入csv文件方式
Apr 21 Python
用python进行视频剪辑
Nov 02 Python
Python 实现绘制子图及子图刻度的变换等问题
May 31 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
获取远程文件大小的php函数
2010/01/11 PHP
PHP 中文处理技巧
2010/04/25 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
Python上下文管理器和with块详解
2017/09/09 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
python线程join方法原理解析
2020/02/11 Python
Python基于内置函数type创建新类型
2020/10/22 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
英语故事演讲稿
2014/04/29 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
五好家庭事迹材料
2014/12/20 职场文书
裁员通知
2015/04/25 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers