Я в настоящее время решал ту же проблему, но я использовал немного другое решение, я чувствую, что оно немного лучше и более общее (вдохновлено @aramaki).
В EchoHandler
вам просто нужно перезаписать __init__
и указать пользовательский Creator
метод.
class EchoHandler(SocketServer.StreamRequestHandler):
def __init__(self, request, client_address, server, a, b):
self.a = a
self.b = b
# super().__init__() must be called at the end
# because it's immediately calling handle method
super().__init__(request, client_address, server)
@classmethod
def Creator(cls, *args, **kwargs):
def _HandlerCreator(request, client_address, server):
cls(request, client_address, server, *args, **kwargs)
return _HandlerCreator
Тогда вы можете просто вызвать метод Creator
и передать все, что вам нужно.
SocketServer.ForkingTCPServer(('10.0.0.6', 4242), EchoHandler.Creator(0, "foo"))
Основное преимущество заключается в том, что таким образом вы не создаете больше экземпляров, чем необходимо, и расширяете класс более управляемым способом - вам больше не нужно изменять метод Creator
.