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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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,我目前正在重新编写一些使用python的select.select()方法的代码,但这些代码只返回我必须去的套接字对象,并手动将该套接字与放在\uuu init\uuu下的类中的套接字匹配。这方面的伪代码基本上是[classobject for classobject in classList if SocketFromSelection==class.socketobject][0](我正在使用它) 我在python文档中发现,在select.select()中,“您也可以自己定义一个包装类,

我目前正在重新编写一些使用python的
select.select()
方法的代码,但这些代码只返回我必须去的套接字对象,并手动将该套接字与放在
\uuu init\uuu
下的类中的套接字匹配。这方面的伪代码基本上是
[classobject for classobject in classList if SocketFromSelection==class.socketobject][0]
(我正在使用它)

我在python文档中发现,在
select.select()
中,“您也可以自己定义一个包装类,只要它有一个合适的fileno()方法(它实际上返回一个文件描述符,而不仅仅是一个随机整数)。”


我的问题是,如何在类中附加fileno()方法,以便将这些类的序列传递到
select.select()
,以便它返回类而不仅仅是套接字?还有,这会在windows上运行吗?如果没有,是否有更好的方法将套接字与类列表中的类中的套接字相匹配?

从您在问题中包含的代码来看,您似乎有一个包含套接字的类(作为
socketobject
属性)。在这种情况下,您可以通过在包装器上代理套接字的
fileno
方法,使包装器对象
select
能够:

def SocketWrapper(object):
    def __init__(self, socket):
        self.socketobj = socket # use whatever you are already doing

    def fileno(self):
        return self.socketobj.fileno()

现在,您可以将
SocketWrapper
的实例直接传递给
select
,而不必传递套接字,然后再排序哪个套接字对应于哪个实例。

从您在问题中包含的代码来看,听起来您有一个包含套接字的类(作为
socketobject
属性)。在这种情况下,您可以通过在包装器上代理套接字的
fileno
方法,使包装器对象
select
能够:

def SocketWrapper(object):
    def __init__(self, socket):
        self.socketobj = socket # use whatever you are already doing

    def fileno(self):
        return self.socketobj.fileno()

现在,您可以将
SocketWrapper
的实例直接传递给
select
,而不是传递套接字,然后在以后必须排序哪个套接字对应于哪个实例。

只要您定义
fileno
以返回它所包装的真正的
fileno
,一切都会好的。可能不是在Windows上,虽然;)。是的,但是如果我的类中有
def fileno():
,那么什么变量可以给我该类所需的文件描述符?它必须是要包装的任何对象的
fileno
,所以
def fileno(self):返回self。你正在包装的东西。fileno()
。我正在尝试包装该类,但是我不认为把这个放在类中就能完成它:
deffileno(self):返回self.fileno()
。如果要包装一个类,请尝试
super().fileno()
(Python 3)。您在这里不是很清楚。只要您定义
fileno
以返回它所包装的内容的真实
fileno
,一切都会很好。不过,可能不在Windows上;)。是的,但是如果我的类中有
def fileno():
,那么什么变量可以为我提供该类所需的文件描述符?它必须是要包装的任何对象的
fileno
,所以
def fileno(self):返回self.thing\u you\u包装.fileno()
。我正在尝试包装该类,但是我不认为把这个放在类中就能完成它:
deffileno(self):返回self.fileno()
。如果要包装一个类,请尝试
super().fileno()
(Python 3)。你在这里不是很清楚。