メッセージをデコードし、ユーザー コードにコールバックするイベント ディスパッチャー フレームワークを構築しています。私の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
callable のリストを作成することもできるDispatcher.onFoo
ので、ユーザーは C# のように複数のハンドラーをアタッチできます。
それを行うための最もPython的な方法は何ですか?