2010-02-28 52 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__方法的類的實例等)非常容易(漂亮瑣碎,實際上;-)。