Python中的回调、观察者和异步套接字

0 投票
1 回答
1056 浏览
提问于 2025-04-15 19:49

我还是个新手Python程序员,正在尝试做一些超出我能力范围的事情。

我做的是用asyncore(和异步套接字模块)创建了一个简单的IRC机器人。这个客户端会在一个不断循环的状态下运行,监听频道里的对话。我想做的事情(我想我想做的)是实现一个观察者模式,这样我就可以对事件做出反应。我想象它会像这样:

class MyBot(object):

   def __init__(self):
      bot = MyIRCClient(server='whatever', channel='#whatever')
      bot.observe(event='join', handler='log_join')
      bot.connect() # Bot is now listening continously in a loop

   def log_join(self, e):
      print e + ' joined the channel.'

我这个设计是基于我对各种JavaScript框架中观察者模式的了解。我不知道这个方法是否可以或者应该在这里使用。有什么建议吗?

1 个回答

2

虽然Observer(观察者模式)在Python中并不是特别流行的设计模式,但也不是完全陌生的东西。如果你对它有些了解,那就可以继续使用。不过,通常调用observe的方法是用handler=self.log_join,这是一个可以直接调用的回调函数,而不是用一个字符串值,这样会让bot去猜测在事件发生时到底要调用什么(而且还没有给它一个self来指向它应该去查找的对象——真让人不安!)。

Callback(回调函数)在Python中是一个非常合理且流行的设计模式,因为在Python中传递可调用的对象(比如函数、绑定的方法、类、带有__call__方法的类实例等等)是非常简单的(其实这很简单;-)。

撰写回答