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中使用Boolean操作符做真值测试实例
Jan 30 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
python模仿网页版微信发送消息功能
Feb 24 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
python如何查看微信消息撤回
Nov 27 Python
python可视化实现代码
Jan 15 Python
Python基础学习之类与实例基本用法与注意事项详解
Jun 17 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
使用Python实现Wake On Lan远程开机功能
Jan 22 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
Python远程方法调用实现过程解析
Jul 28 Python
Python中with上下文管理协议的作用及用法
Mar 18 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
操作Oracle的php类
2006/10/09 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
JavaScript中常见陷阱小结
2010/04/27 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
ant design实现圈选功能
2019/12/17 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
python实现多线程抓取知乎用户
2016/12/12 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
python中时间模块的基本使用教程
2019/05/14 Python
python实现大文件分割与合并
2019/07/22 Python
Python pandas用法最全整理
2019/08/04 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
《小摄影师》教学反思
2016/02/18 职场文书