Python中的回调、观察者和异步套接字
我还是个新手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__
方法的类实例等等)是非常简单的(其实这很简单;-)。