我正在构建一个事件调度程序框架,用于解码消息并回调到用户代码中。我的 C++ 背景建议我写:
class Handler:
def onFoo(self):
pass
def onBar(self):
pass
class Dispatcher:
def __init__(self):
self.handler = Handler()
def run():
while True:
msg = decode_message() # magic
if msg == 'foo':
handler.onFoo()
if msg == 'bar':
handler.onBar()
然后框架用户将编写如下内容:
class MyHandler(Handler):
def onFoo(self):
do_something()
dispatcher = Dispatcher()
myHandler = MyHandler()
dispatcher.handler = myHandler
dispatcher.run()
但我也可以想象将onFoo()
andonBar()
作为方法Dispatcher
并让用户用其他方法替换它们。然后用户的代码将如下所示:
def onFoo():
do_something()
dispatcher = Dispatcher()
dispatcher.onFoo = onFoo
我还可以Dispatcher.onFoo
列出可调用对象,这样用户就可以像在 C# 中那样附加多个处理程序。
最Pythonic的方法是什么?