Литье розеток к подтипам - PullRequest
       4

Литье розеток к подтипам

1 голос
/ 21 августа 2010

Я пытаюсь создать свой собственный подкласс 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

Ответы [ 2 ]

2 голосов
/ 22 августа 2010

Из вашего описания видно, что вы создаете обработчик сообщений, в котором имеет сокет (или сокеты).При разработке классов has-a указывает на состав и делегирование, в то время как is-a может указывать на наследование.

Так что неуместно наследовать от socket.socket, и вашкод уже выглядит немного гибридным.Примерно такой грубый псевдокод, вероятно, лучше всего подходит для этой задачи:

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

    def wait(self):
        debug('waiting...')
        i, o, e = select(...)
1 голос
/ 22 августа 2010

Насколько сложно настроить дескрипторы сокетов для отображения словаря в объектах-оболочках сокетов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...