Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!news-1.dfn.de!news.dfn.de!news.informatik.hu-berlin.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Tom P Newsgroups: comp.lang.python Subject: Re: HTTPserver: how to access variables of a higher class? Date: Fri, 05 Apr 2013 15:26:20 +0200 Lines: 63 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net UVLnROf6Ej8mrrqQG4qQSg5Kz4MYx8eqrO+WxJndH6NQiN8QM= Cancel-Lock: sha1:8FG9fGKZLIl8hpKiIEw20FKwK6o= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121011 Thunderbird/16.0.1 In-Reply-To: Xref: csiph.com comp.lang.python:42817 On 04/05/2013 01:54 PM, Dave Angel wrote: > On 04/05/2013 07:02 AM, Tom P wrote: >> First, here's a sample test program: >> >> import sys >> from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler >> >> class MyRequestHandler(BaseHTTPRequestHandler, object): >> def do_GET(self): >> top_self = super(MyRequestHandler, self) # try to access >> MyWebServer instance >> self.send_response(200) >> self.send_header('Content-type', 'text/html') >> self.end_headers() >> self.wfile.write("thanks for trying, but I'd like to get at >> self.foo and self.bar") >> return >> >> class MyWebServer(object): >> def __init__(self): >> self.foo = "foo" # these are what I want to access from inside >> do_GET >> self.bar = "bar" >> self.httpd = HTTPServer(('127.0.0.1', 8000), MyRequestHandler) >> sa = self.httpd.socket.getsockname() >> print "Serving HTTP on", sa[0], "port", sa[1], "..." >> >> def runIt(self): >> self.httpd.serve_forever() >> >> server = MyWebServer() >> server.runIt() >> >> >> >> I want to access the foo and bar variables from do_GET, but I can't >> figure out how. I suppose this is something to do with new-style vs. >> old-style classes, but I lost for a solution. > > It'd have been good to tell us that this was on Python 2.7 > Yes, sorry for the omission. > Is MyWebServer class intended to have exactly one instance? Yes, but I was trying to keep it general. If so, you > could save the instance as a class attribute, and trivially access it > from outside the class. > > If it might have more than one instance, then we'd need to know more > about the class BaseHTTPServer.HTTPServer, From a quick glance at the > docs, it looks like you get an attribute called server. So inside the > do_GET() method, you should be able to access self.server.foo and > self.server.bar ok, let me test that. Do I assume correctly from what you write that the super() is not needed? In reality there is just one instance of MyWebServer, but I was looking for a general solution. > > See http://docs.python.org/2/library/basehttpserver.html >