如何从BaseHTTPRequestHandler访问HTTPServer的成员?

时间:2011-04-09 01:58:35

标签: python httpserver basehttpserver

我正在整理一个涉及GUI,HTTP和TCP服务器的小应用程序。 GUI控制从HTTP和TCP服务器返回到客户端的响应。我使用HTTPServer和SocketServer.TCPServer类作为服务器,具有BaseHTTPRequestHandler和StreamRequestHandler的子类。但是让我们首先关注事物的HTTP方面。

当HTTPServer收到请求时,它应该检查GUI的状态,并做出适当的响应。我已经将一个成员变量添加到指向GUI的HTTPServer,但是无法找到从BaseHTTPRequestHandler子类访问该字段的好方法。怎么办呢?

下面是我目前拥有的代码,尽管Python抛出异常,MyHTTPHandler instance has no attribute 'server'

class MyHTTPHandler(BaseHTTPRequestHandler):
    def __init__(self, request, client_address, server):
        BaseHTTPRequestHandler.__init__(self, request, client_address, server)
        self._server = server

    def do_GET(self):
        self._server.get_interface().do_something()
        [...]

1 个答案:

答案 0 :(得分:5)

BaseHTTPRequestHandler具有内置属性server。不确定为什么要在继承的类中设置另一个self._server。如果您还可以使用get_interface()方法复制代码,那将非常有用。这个'服务器'的论点是什么?继承HttpServer的实例?