命令分发器举例

作者: 青蛙兄 分类: 高阶 发布时间: 2019-07-05 23:16

示例:命令分发器举例

class Dispatcher:  

    def __init__(self):  

        self._run()  

    def cmd1(self):  

        print('I am cmd1')  

    def cmd2(self):  

        print('I am cmd2')  

    def _run(self):  

        while True:  

            cmd = input('PLz input a command:')  

            if cmd.strip() == 'quit':  

                break  

            getattr(self,cmd ,lambda : print('unknown Command{}'.format(cmd)))()  

Dispatcher() 

上例中使用getattr方法找到对象的属性的方式,比自己维护一个字典来建立名称和函数之间的关系的方式好多了

另一个写法:

class Dispatcher:  

    def reg(self, cmd, fn):  #注册  

        if isinstance(cmd, str):  

            setattr(self.__class__, cmd, fn)  

        else:  

            print("It's error")  

  

    def run(self): #运行  

        while True:  

            cmd = input('PLz input a command:')  

            if cmd.strip() == 'quit':  

                break  

            getattr(self, cmd.strip(), self.defaultfn)()  

  

    def defaultfn(self): #默认  

        print('I am defaultfn')  

  

  

dis = Dispatcher()  

dis.reg('cmd1', lambda selt: print(1))  

dis.reg('cmd2', lambda selt: print(2))  

dis.run()

发表评论

电子邮件地址不会被公开。