2010-08-21 58 views
1

我想創建我自己的socket.socket的子類,將能夠處理自定義消息。到目前爲止,我的代碼如下所示:鑄造插座亞型

self._sockets.append(s) 
    logging.debug("Waiting for incoming connections on port %d" % (port)) 
    while not self.shutdown: 
     inputready,outputready,exceptready = select(self._sockets,[],[]) 
     print "Select returned" 
     for i in inputready: 
      if s == i: 
       # handle the server socket 
       client, address = s.accept() 
       self._sockets.append(client) 
       print "%r , %r" % (client, address) 
      else: 
       # handle all other sockets 
       s.handleMessage() 

所以你可以看到我現在不是acceptin新的連接,或者如果它從另一個套接字返回它會調用的handleMessage該插座上。現在的問題是,當然socket.accept()將返回一個socket.socket,而不是我的子類,它實現了handleMessage函數。

什麼是最簡單的方法來獲得我的自定義類,而不是默認的socket.socket?

+2

我建議您製作** has-a **套接字的消息處理程序。不要繼承,撰寫。 – msw 2010-08-21 19:55:51

回答

2

從您的描述看來,您正在製作一個消息處理程序,has-a套接字(或套接字)。當設計類別has-a指示組成和委派,而是-a可以指示繼承。

所以從socket.socket繼承是不合適的,你的代碼已經看起來有點混合了。像這樣的真正粗糙的僞代碼可能是最適合的任務:

class MyMessageHandler(object): 
    def __init__(self): 
     self.sockets = [...] 

    def wait(self): 
     debug('waiting...') 
     i, o, e = select(...) 
+0

+1:授權比繼承更有意義。 – 2010-08-21 21:26:51

1

它是如何難以設置一個字典映射套接字描述符到您的套接字包裝對象?