2010-02-28 51 views
0

我仍然是一位新手Python程序员,我正在尝试做一些超出我的想法的事情。Python中的回调,观察者和异步套接字

我所做的是使用asyncore(和异步套接字模块)创建一个简单的IRC bot。客户端连续循环运行,监听通道中的对话。我想做什么(我认为?)是实施观察员模式,以便我可以对事件做出反应。我想它会看起来像这样︰

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框架中使用的观察员。我不知道在这里是否可以应用相同的技术。有什么建议么?

回答

2

虽然Observer在Python中并不是一个非常流行的DP(设计模式),但它也不是一个完全“异形”的,所以如果你熟悉它,就请继续。然而,拨打observe的正常方法是使用handler=self.log_join,这是一个实际上可调用的回调,而不是,字符串值强制bot执行自检以查明事件发生时实际必须调用的内容(甚至不是给它一个self来引用它应该进行内省的对象 - 不寒而栗!)。

Callback在Python中是一个非常合理和流行的DP,但这是因为传递第一类可调用函数(函数,绑定方法,类,带有__call__方法的类的实例等)非常容易(漂亮琐碎,实际上;-)。