Python設計模式編程中解釋器模式的簡單程序示例分享
更新時間:2016年03月02日 15:05:07 作者:ponder008
這篇文章主要介紹了Python設計模式編程中解釋器模式的簡單程序示例分享,解釋器模式強調用抽象類來表達程序中將要實現(xiàn)的功能,需要的朋友可以參考下
模式特點:給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
我們來看一下下面這樣的程序結構:
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)
那么它所體現(xiàn)出的類圖是這樣的:

再來看一個例子:
#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(' ') #找出第一個空格出現(xiàn)的位置
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();
類圖:

相關文章
python爬蟲之利用Selenium+Requests爬取拉勾網
這篇文章主要介紹了python爬蟲之利用Selenium+Requests爬取拉勾網,文中有非常詳細的代碼示例,對正在學習python爬蟲的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04
Python 的 __str__ 和 __repr__ 方法對比
這篇文章主要介紹了Python 的 __str__ 和 __repr__ 方法的相關資料,幫助大家區(qū)分__str__ 和 __repr__ ,感興趣的朋友可以了解下2020-09-09
django的auth認證,authenticate和裝飾器功能詳解
這篇文章主要介紹了django的auth認證,authenticate和裝飾器功能詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-07-07
Python?hashlib模塊與哈希算法保護數(shù)據完整性教程
hashlib模塊為Python提供了一種簡便的方式來使用各種哈希算法,如MD5、SHA-1、SHA-256等,哈希函數(shù)廣泛用于密碼學、數(shù)據完整性驗證和安全存儲等領域2024-01-01
Pytorch distributed 多卡并行載入模型操作
這篇文章主要介紹了Pytorch distributed 多卡并行載入模型操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Python函數(shù)參數(shù)分類使用與新特性詳細分析講解
在聲明函數(shù)的時候,一般會根據函數(shù)所要實現(xiàn)的功能來決定函數(shù)是否需要參數(shù)。在多數(shù)情況下,我們聲明的函數(shù)都會使用到參數(shù),這篇文章主要介紹了Python函數(shù)參數(shù)2023-01-01
Python中執(zhí)行MySQL結果限制和分頁查詢示例詳解
這篇文章主要為大家介紹了Python中執(zhí)行MySQL結果限制和分頁查詢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11

