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

时间:2010-02-28 06:02:58

标签: python design-patterns sockets network-programming

我仍然是一个新手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框架中使用的观察者。我不知道是否可以或应该在这里应用相同的技术。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

虽然Observer在Python中不是特别受欢迎的DP(设计模式),但它也不是一个完全“外星人”的,所以如果你熟悉它,那么就去吧。但是,调用observe的正常方式是handler=self.log_join,一个实际上是可调用的回调,,其字符串值强制bot执行内省找出事件发生时它实际需要调用的内容(甚至不给它self来引用它应该对内部进行内省的对象 - 颤抖!)。

Callback是Python中一个非常合理且流行的DP,但这是因为传递一流的callables(函数,绑定方法,类,带有__call__方法的类的实例等等) )非常简单(非常简单,实际上; - )。