BaseHTTPRequestHandler with custom instance

匿名 (未验证) 提交于 2019-12-03 01:10:02

问题:

this is my http server:

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer  class test:     def show(self):         return "aaaa"  class http_server:     def __init__(self, t1):         self.t1 = t1         server = HTTPServer(('', 8080), myHandler)         server.serve_forever()  class myHandler(BaseHTTPRequestHandler):     def do_GET(self):         self.send_response(200)         self.send_header('Content-type','text/html')         self.end_headers()         self.wfile.write(self.t1.show()) #Doesnt work         return  class main:     def __init__(self):         self.t1 = test()         self.server = http_server(self.t1)  if __name__ == '__main__':     m = main() 

I need to acces instance t1 inside of myHander.

Is there any way how to do it ?

Thanks!

回答1:

there a way to do it is to set the property to the class :

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer  class test:     def show(self):         return "aaaa"  class http_server:     def __init__(self, t1):         myHandler.t1 = t1         server = HTTPServer(('', 8080), myHandler)         server.serve_forever()  class myHandler(BaseHTTPRequestHandler):     t1 = None     def do_GET(self):         self.send_response(200)         self.send_header('Content-type','text/html')         self.end_headers()         self.wfile.write(self.t1.show()) #Doesnt work         return  class main:     def __init__(self):         self.t1 = test()          self.server = http_server(self.t1)  if __name__ == '__main__':     m = main() 

You have to be careful that's every where you use myHandler that's will be the same instance of t1



回答2:

Slightly better version, where t1 will not be the same for each instance.

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer  class test:     def show(self):         return "aaaa"  class http_server:     def __init__(self, t1):         def handler(*args):             myHandler(t1, *args)         server = HTTPServer(('', 8080), handler)         server.serve_forever()  class myHandler(BaseHTTPRequestHandler):     def __init__(self, t1, *args):         self.t1 = t1         BaseHTTPRequestHandler.__init__(self, *args)      def do_GET(self):         self.send_response(200)         self.send_header('Content-type','text/html')         self.end_headers()         self.wfile.write(self.t1.show()) #Doesnt work         return  class main:     def __init__(self):         self.t1 = test()          self.server = http_server(self.t1)  if __name__ == '__main__':     m = main() 


回答3:

I know I'm answering pretty late, but that could probably be helpful for future viewers. There is a really easy way to access t1 like it was asked by using the server variable of the BaseHTTPRequestHandler object:

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer  class test:     def show(self):         return "aaaa"  class http_server:     def __init__(self, t1):         server = HTTPServer(('', 8080), myHandler)         server.t1 = t1         server.serve_forever()  class myHandler(BaseHTTPRequestHandler):     def do_GET(self):         self.send_response(200)         self.send_header('Content-type','text/html')         self.end_headers()         self.wfile.write(self.server.t1.show())         return  class main:     def __init__(self):         self.t1 = test()         self.server = http_server(self.t1)  if __name__ == '__main__':     m = main() 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!