Is there is a better way to create parameterized classes than defining and returning a class in a closure? I ask because I want to create arbitrary BaseRequestHandler subclasses that delegate line handling to a given line handler, as in this example: from SocketServer import *
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass def LineRequestHandler(handler): class __LineRequestHandler(BaseRequestHandler): def handle(self): for line in self.lines(): handler.handle(line) def lines(self): line = self.line() while line: yield line line = self.line() def line(self): parts = [] while not parts or parts[-1] and not parts[-1][-1] == "\n": parts.append(self.request.recv(2**10)) if parts: return ''.join(parts)[0:-1] return __LineRequestHandler class SomeLineHandler: def handle(self, line): print "I got a line: %s" % line if __name__ == '__main__': s = ThreadingTCPServer(("", 2005), LineRequestHandler(SomeLineHandler())) s.serve_forever() I really wish I could create a class whose instances were classes that subclassed BaseRequestHandler. Is this possible, or is there a better way than my approach here? Or am I crazy? And I may be dense, so if there is an easier way to stream sockets as line streams, please let me know. I honestly don't think it should be this difficult to implement a socket handler this simple.
-- http://mail.python.org/mailman/listinfo/python-list