Как я могу получить доступ к членам HTTPServer из BaseHTTPRequestHandler? - PullRequest
2 голосов
/ 09 апреля 2011

Я собираю небольшое приложение, которое включает серверы с графическим интерфейсом, HTTP и TCP. GUI контролирует ответы, возвращаемые с серверов HTTP и TCP клиентам. В качестве серверов я использую классы HTTPServer и SocketServer.TCPServer с подклассами для BaseHTTPRequestHandler и StreamRequestHandler. Но для начала давайте сосредоточимся на стороне HTTP.

Когда HTTPServer получает запрос, он должен проверить состояние графического интерфейса и ответить соответствующим образом. Я добавил переменную-член в HTTPServer, указывающую на GUI, но пока не могу найти хороший способ получить доступ к этому полю из подкласса 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 Ответ

5 голосов
/ 09 апреля 2011

BaseHTTPRequestHandler имеет встроенный атрибут server. Не уверен, почему вы устанавливаете другой self._server в унаследованном классе. Было бы полезно, если вы также можете скопировать код в методе get_interface(). И что это за аргумент «сервер»? экземпляр унаследованного HttpServer?

...