【发布时间】:2019-10-12 22:04:59
【问题描述】:
我正在用 python 编写我自己的套接字类版本。
我想知道是否有办法不使用它的__init__ 方法初始化子类,而是使用套接字类的现有实例来初始化它。
基本上,我想做的,就是继承socket类,覆盖accept()方法,返回我自己类的对象,而不是socket类。
为了解决这个问题,我想在我的自定义套接字类中的__init__ 方法中实现设置基本套接字的可能性,该方法将套接字的实例作为参数并创建我的新实例自定义套接字类,使用套接字类的现有实例,或使用fromSocket() 类方法执行相同操作。
我现在的问题是如何将套接字类的现有实例设置为我自己的套接字的超类而不使用属性来包含套接字对象? (这在 python 中甚至可能吗?)
我发现的所有其他相关问题更多是关于如何在运行时更改超类。我可能在某个地方忽略了答案,但我找不到。
我的代码如下所示:
import socket
class MySocket(socket.socket):
def __init__(self, sock:socket.socket=None):
if sock != None:
# initialize using existing instance contained in sock
# How? (My question)
else:
super().__init__() # Default conf is enough for now
def accept(self):
s, addr = super().accept()
return MySocket(sock=s) # <= This is what I want to do
我想这样称呼它:
s = MySocket()
# Call bind and listen, left out because it doesn't matter here
client, addr = s.accept()
# Client is an instance of socket.socket, but it should be MySocket
【问题讨论】:
标签: python python-3.x sockets inheritance superclass