注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

把复杂的命令处理,划分到各自模块处理  

2017-05-22 16:35:51|  分类: 方法技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

之前的fx脚本划分为:应用模块,命令处理模块,及多个其他功能模块。

这些模块的命令处理都,在命令模块统一处理,但是这样有个问题。

每增加一个功能,就要在两处地方修改脚本,导致命令处理模块越来越大。

而且这尽管符合所有的命令都在命令模块处理,但是一个功能分在两个地方,

不利于管理。

修改了一下结构,使他们能够随模块的增加而不用修改命令模块代码。这样符合简单的叠加原理。

命令模块添加一个动态添加命令的方法,这样其他模块可以动态调用来增加它的相应处理命令。

class Cmd:
 def __init__(self, fx):
  self.fx = fx
  self.loopping = True
  self.cmd = []
  self.cmdset = {
   'help':self.on_help, 'exit':self.on_exit, 'cls':self.on_cls, 'docmd':self.on_docmd,
   'dopy':self.on_dopy, 'dosql':self.on_dosql, 'bat':self.on_bat
   }

 def AddCmdHandle(self, cmd_str, cmd_handle): # 动态添加命令
  try:
   id(self.cmdset[cmd_str])
  except KeyError:
   self.cmdset[cmd_str] = cmd_handle
   return

 def CmdLoop(self):
  while self.loopping:
   try:
    print('[ 帮助 help; 清屏 cls; 退出 exit ]')
    s = input('输入命令: ')
    self.cmd = s.lower().split()
    if len(self.cmd) == 0: continue   
    if self.cmd[0] in self.cmdset:
     self.cmdset[ self.cmd[0] ](self.cmd)
    else:
     print('[-] 未知命令!')
   except KeyboardInterrupt:
    print('[*] 键盘中断!')
    continue

 def on_help(self,cmd):

。。。

应用模块负责生成对象

# 应用类
class FenXi:
 def __init__(self):
  self.cmd = cmd.Cmd(self) # 处理命令

  self.td = td.TradeDay(self) #交易日处理
  self.td.Add2Cmd(self.cmd)

 def Run(self):
  self.cmd.CmdLoop()

############################################################################################
fx = FenXi()
fx.Run()

。。。

其他模块里面要把相应的命令及命令处理函数添加到命令模块对象

class TradeDay:
 def __init__(self, fx):
  self.fx = fx
  self.dat = [] # 交易日列表
。。。
 def Add2Cmd(self, cmdobj):
  cmdobj.AddCmdHandle('td', self.on_td)

 def on_td(self, cmd):
  if len(cmd) < 2:
   print(r'帮助: td len|down|show|save|load|add|clear|del|frmsz|fromsh')
   return

  评论这张
 
阅读(2)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017