Python设计模式编程中解释器模式的简单程序示例分享
作者:ponder008 发布时间:2023-01-16 08:44:29
标签:Python,设计模式
模式特点:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
我们来看一下下面这样的程序结构:
class Context:
def __init__(self):
self.input=""
self.output=""
class AbstractExpression:
def Interpret(self,context):
pass
class Expression(AbstractExpression):
def Interpret(self,context):
print "terminal interpret"
class NonterminalExpression(AbstractExpression):
def Interpret(self,context):
print "Nonterminal interpret"
if __name__ == "__main__":
context= ""
c = []
c = c + [Expression()]
c = c + [NonterminalExpression()]
c = c + [Expression()]
c = c + [Expression()]
for a in c:
a.Interpret(context)
那么它所体现出的类图是这样的:
再来看一个例子:
#encoding=utf-8
#
#by panda
#解释器模式
def printInfo(info):
print unicode(info, 'utf-8').encode('gbk'),
#上下文类:演奏内容
class PlayContext():
text = None
PlayText = None
#抽象表达式类
class Expression():
def Interpret(self, context):
if len(context.PlayText) == 0:
return
else:
playKey = context.PlayText[0:1]
context.PlayText = context.PlayText[2:]
tmp = context.PlayText.index(' ') #找出第一个空格出现的位置
playValue = context.PlayText[0:tmp]
context.PlayText = context.PlayText[tmp+1:]
self.Excute(playKey,playValue)
def Excute(self,playKey,playValue):
pass
#音高
class Pitch(Expression):
pitch = None
def Excute(self, key, value):
value = int(value)
if value == 1:
self.pitch = '低音'
elif value == 2:
self.pitch = '中音'
elif value == 3:
self.pitch = '高音'
printInfo(self.pitch)
#音符
class Note(Expression):
Notes = {
'C':1,
'D':2,
'E':3,
'F':4,
'G':5,
'A':6,
'B':7,
}
note = None
def Excute(self, key, value):
self.note = self.Notes[key]
printInfo('%d' % self.note)
def clientUI():
context = PlayContext()
context.PlayText = "O 2 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 3 C 1 O 2 A 0.5 G 1 C 0.5 E 0.5 D 3 "
expression = None;
while(len(context.PlayText) > 0):
str = context.PlayText[0:1];
if(str == 'O'):
expression = Pitch()
elif(str == 'C' or str == 'D' or str == 'E' or str == 'F' or str == 'G' or str == 'A' or str == 'B' or str == 'P'):
expression = Note()
expression.Interpret(context)
return
if __name__ == '__main__':
clientUI();
类图:


猜你喜欢
- --分页存储过程示例 Alter PROCEDURE [dbo].[JH_PageDemo] @pageSize int = 9000000
- SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A')
- 问题我使用python 2.7和xlwt模块进行excel导出我想设置我知道可以使用的单元格的背景颜色style1 = xlwt.easyx
- 先来看一个老掉牙的故事:福特说,我在设计汽车之前,到处去问人们“需要一个什么样的更好的交通工具?”,几乎所有人的答案都是 ── 一匹“更快的
- 本章我们将介绍Django 管理工具及如何使用 Django 来创建项目,第一个项目我们以 HelloWorld 来命令项目。一、Djang
- python之标准库htmlhtml库是用于解析HTML的一个工具,是python自带的标准库之一。html库位置:__init__.py文
- 另:@会影响效率如:@mysql_connect() 可以导出错误,但会影响效率。mysql与mysqli的区别:
- 情人节快乐!这个节日怎么会少了浪漫的玫瑰花!用Python的turtle库绘图是很简单的,画了一个玫瑰花,下面奉上源码:源码:'
- 打包pyinstaller 02.py --noconsole --hidden-import PySide2.QtXml报错0:The &
- OpenCV的imread不能读取中文路径问题import numpy as npimport cv2cv_img = cv2.imdeco
- 该章节我们将要学习如何将 word 文件转为 PDF文件,其实网上有很多种生成 PDF 的教程,不过绝大多数都是以 windows 为主的,
- 本文实例讲述了python使用分治法实现求解最大值的方法。分享给大家供大家参考。具体分析如下:题目:给定一个顺序表,编写一个求出其最大值和最
- Qt是一种基于C++的跨平台图形用户界面应用程序开发框架。如何跨平台?上到服务器上位机,下到嵌入式GUI,上天入地无所不能。Qt最早是由19
- 写在之前首先是写在之前的一些建议:首先是关于这本书,我真的认为他是将神经网络里非常棒的一本书,但你也需要注意,如果你真的想自己动手去实现,那
- 一、函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤1.定义函数–封装独立
- sklearn生成多项式import numpy as npfrom sklearn.preprocessing import Polyno
- python使用qq邮箱(个人邮箱)发送邮件需开启qq邮箱的SMTP服务在设置中开启pop3/SMTP服务,返回的密码就是之后代码中登录使用
- 这里批量处理word文档的操作主要是通过python-docx非标准库实现的,通过定位到文档对象、再到段落、最后到一行文本从而完成针对文字对
- 缘起最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>该书以java语言演绎了常见设计模式本系列笔记拟采用gol
- 本文实例为大家分享了OpenCV基于ORB算法实现角点检测的具体代码,供大家参考,具体内容如下ORB算法是FAST算法和BRIEF算法的结合