Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将套接字转换为子类型_Python_Sockets - Fatal编程技术网

Python 将套接字转换为子类型

Python 将套接字转换为子类型,python,sockets,Python,Sockets,我正在尝试创建自己的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._socke

我正在尝试创建自己的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。现在的问题是,off-course 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(...)

我建议您制作具有套接字的消息处理程序。不要继承,要创作。