Я пытаюсь создать свой собственный подкласс 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()
так как вы можете видеть, что я либо принимаю новые подключения, либо если он возвращается из другого сокета, он вызовет handleMessage в этом сокете. Теперь проблема заключается в том, что вне курса socket.accept() вернет socket.socket, а не мой подкласс, который реализует функцию handleMessage.
Каким будет самый простой способ получить мой пользовательский класс вместо стандартного socket.socket?
Из вашего описания видно, что вы создаете обработчик сообщений, в котором есть - сокет (или сокеты). При разработке классов has-a указывает состав и делегирование, а is-a может указывать наследование.
Так что унаследовать от socket.socket нецелесообразно, и ваш код уже выглядит немного гибридным. Что-то вроде этого действительно грубого псевдокода, вероятно, лучше всего подходит для задачи:
class MyMessageHandler(object):
def __init__(self):
self.sockets = [...]
def wait(self):
debug('waiting...')
i, o, e = select(...)
Насколько сложно установить дескрипторы сокетов для сопоставления словаря со своими объектами оболочки?