我仍然是一个新手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框架中使用的观察者。我不知道是否可以或应该在这里应用相同的技术。有什么建议吗?
答案 0 :(得分:2)
虽然Observer
在Python中不是特别受欢迎的DP(设计模式),但它也不是一个完全“外星人”的,所以如果你熟悉它,那么就去吧。但是,调用observe
的正常方式是handler=self.log_join
,一个实际上是可调用的回调,不,其字符串值强制bot
执行内省找出事件发生时它实际需要调用的内容(甚至不给它self
来引用它应该对内部进行内省的对象 - 颤抖!)。
Callback
是Python中一个非常合理且流行的DP,但这是因为传递一流的callables(函数,绑定方法,类,带有__call__
方法的类的实例等等) )非常简单(非常简单,实际上; - )。