设置后如何在 Python 中访问 HTTPServer 的 RequestHandlerClass?

How to access RequestHandlerClass for HTTPServer in Python once it is set?

我有一个自定义 BaseHTTPServer.BaseHTTPRequestHandler 可以(部分)在下面看到。它有一个特殊的方法,允许我分配一个回复生成器 - 一个 class 接收一些数据(例如 GET 请求中某些参数的值)并生成一个 XML 回复然后可以作为对请求的回复发送回客户端:

class CustomHandler(BaseHTTPServer.BaseHTTPRequestHandler):
  # implementation
  # ...

  def set_reply_generator(self, generator):
    self.generator = generator

  def do_GET(self):
    # process GET request
    # ...
    # and generate reply using generator
    reply = self.generator.generate(...) # ... are some parameters that were in the GET request
    # Encode
    reply = reply.encode()
    # set headers
    self.__set_headers__(data_type='application/xml', data=reply)
    # and send away
    self.wfile.write(reply)
    self.wfile.write('\n'.encode())

我将此处理程序传递给 BaseHTTPServer.HTTPServer:

def run(addr='127.0.0.1', port=8080):
  server_addr = (addr, port)
  server = BaseHTTPServer.HTTPServer(server_addr)
  server_thread = threading.Thread(target=server.server_forever)
  server_thread.start()

由于 BaseHTTPServer.HTTPServer 的构造函数期望 class 而不是实例作为 RequestHandlerClass 参数传递,我不能只创建我的处理程序的实例,调用 set_reply_generator() 然后传递下去。即使这有效,我仍然希望以后能够访问处理程序(例如,如果通过 POST 请求,GET 请求的回复生成器已更改),为此我需要知道如何检索服务器正在使用的实例。

我已经看过 here 但没找到(可能没找到)。我有一种不好的感觉,它是私有的(又名 __...__)。

到目前为止我能找到的是服务器使用的处理程序的 class 可以通过 RequestHandlerClass 成员检索,但是这与检索一个允许我调用 set_reply_generator(...).

的处理程序实例

此外,我尝试实际创建自定义处理程序的实例,但后来我陷入了先有鸡还是先有蛋的问题:

这是一种间接证明 HTTPServer 的构造函数是负责实例化处理程序的构造函数。

已回答here。无需直接访问处理程序,而是创建一个静态 class 成员,无需实例即可访问该成员,但在处理程序想要使用它时仍会对其进行处理。