在类上创建fileno?

2024-09-28 21:02:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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


Tags: 对象方法代码inforifinit手动
1条回答
网友
1楼 · 发布于 2024-09-28 21:02:43

从你的问题中包含的代码来看,听起来你有一个类,其中包含一个套接字(作为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,而不是传递套接字,然后在以后必须对哪个套接字与哪个实例对应进行排序。在

相关问题 更多 >