Python 在类上创建文件否?
我目前正在重新编写一些使用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()中,“您也可以自己定义一个包装类,
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)。你在这里不是很清楚。