I’m still a neophyte Python programmer and I’m trying to do something that is a bit over my head.
What I’ve done is create a simple IRC bot using asyncore (and asynchronous sockets module). The client runs in a continuous loop, listening to the conversation in the channel. What I would like to do (I think?) is implement an observer pattern so I can respond to events. I imagine it would look somthing like this:
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.'
I’m basing this design around what I know of observers used in the various Javascript frameworks. I don’t know if the same technique can or should be applied here. Any suggestions?
While
Observeris not a particularly popular DP (design pattern) in Python, it’s not a totally “alien” one either, so if you’re familiar with it, go right ahead. However, the normal way to callobservewould be withhandler=self.log_join, a callback that’s actually a callable, not with a string value forcing thebotto perform introspection to find out what it actually has to call when the event occurs (and not even giving it aselfto refer to the object it’s supposed to perform introspection on — shudder!).Callbackis a perfectly reasonable and popular DP in Python, but that’s because passing around first-class callables (functions, bound methods, classes, instances of classes with a__call__method, etc, etc) is so wonderfully easy (pretty trivial, actually;-).