我希望能够将实例变量添加到我的子类http.server.BaseHTTPRequestHandler。
这是我的代码:
from http.server import BaseHTTPRequestHandler, HTTPServer
import urllib
class Server(BaseHTTPRequestHandler):
def __init__(self, request, client_addr, server):
super().__init__(request, client_addr, server)
self.pathobj = urllib.parse.urlparse(self.path)
def do_HEAD(self):
self.send_response(200)
def do_GET(self):
print(self.pathobj)
self.send_response(200)
self.end_headers()
def do_POST(self):
print(self.pathobj)
self.send_response(405)
self.end_headers()
def run(server_class=HTTPServer, handler_class=Server, port=8080):
server_address = ("", port)
httpd = server_class(server_address, handler_class)
print("Starting httpd on port {}...".format(port))
httpd.serve_forever()
if __name__ == "__main__":
run()
我希望能够访问每个类方法中ParseResult
返回的对象,urllib.parse.urlparse
而无需在每个类方法self.pathobj = urllib.parse.urlparse(self.path)
的开头重写。
上面的代码不起作用 - 当do_GET
或被do_POST
调用时,它会抱怨'Server' object has no attribute 'pathobj'
。
http.server.BaseHTTPRequestHandler的上述文档说:
所有相关信息都存储在处理程序的实例变量中。子类不需要重写或扩展该
__init__()
方法。
但我没有看到另一种方法来做到这一点。可能吗?