Я пишу свою собственную версию класса сокетов в Python.Мне было интересно, есть ли способ не инициализировать подкласс, используя его метод __init__
, а скорее инициализировать его, используя существующий экземпляр класса сокетов .
В основном то, что я пытаюсь сделать, это наследовать от класса сокета и переписать метод accept()
, чтобы вернуть объект моего собственного класса вместо класса сокета.
Чтобы обойти эту проблему, яхочу реализовать возможность установки базового сокета в моем методе __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