如何从BaseHTTPRequestHandler访问HTTPServer的成员?

2 投票
1 回答
2611 浏览
提问于 2025-04-16 15:22

我正在做一个小应用程序,这个程序涉及到图形用户界面(GUI)、HTTP和TCP服务器。这个GUI负责控制HTTP和TCP服务器给客户端返回的响应。我使用了HTTPServer和SocketServer.TCPServer这两个类来作为服务器,并为BaseHTTPRequestHandler和StreamRequestHandler创建了子类。不过我们先专注于HTTP的部分。

当HTTPServer收到请求时,它应该检查GUI的状态,并做出相应的回应。我在HTTPServer中添加了一个指向GUI的成员变量,但我不知道怎么从BaseHTTPRequestHandler的子类中访问这个变量。这个该怎么做呢?

下面是我目前的代码,不过Python抛出了一个异常,提示MyHTTPHandler实例没有'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 个回答

6

BaseHTTPRequestHandler 这个类里有一个自带的属性叫 server。我不太明白你为什么在继承的类里还要设置一个 self._server。如果你能把 get_interface() 方法里的代码也贴出来,那就更好了。另外,这个 'server' 参数是什么呢?是继承自 HttpServer 的一个实例吗?

撰写回答