J
Jess Austin
I may be attempting something improper here, but maybe I'm just going
about it the wrong way. I'm subclassing
http.server.CGIHTTPRequestHandler, and I'm using a decorator to add
functionality to several overridden methods.
def do_decorate(func):
.. def wrapper(self):
.. if appropriate():
.. return func()
.. complain_about_error()
.. return wrapper
class myHandler(CGIHTTPRequestHandler):
.. @do_decorate
.. def do_GET(self):
.. return super().do_GET()
.. # also override do_HEAD and do_POST
My first thought was that I could just replace that whole method
definition with one line:
class myHandler(CGIHTTPRequestHandler):
.. do_GET = do_decorate(super().do_GET)
That generates the following error:
SystemError: super(): __class__ cell not found
So I guess that when super() is called in the context of a class def
rather than that of a method def, it doesn't have the information it
needs. Now I'll probably just say:
do_GET = do_decorate(CGIHTTPRequestHandler.do_GET)
but I wonder if there is a "correct" way to do this instead? Thanks!
about it the wrong way. I'm subclassing
http.server.CGIHTTPRequestHandler, and I'm using a decorator to add
functionality to several overridden methods.
def do_decorate(func):
.. def wrapper(self):
.. if appropriate():
.. return func()
.. complain_about_error()
.. return wrapper
class myHandler(CGIHTTPRequestHandler):
.. @do_decorate
.. def do_GET(self):
.. return super().do_GET()
.. # also override do_HEAD and do_POST
My first thought was that I could just replace that whole method
definition with one line:
class myHandler(CGIHTTPRequestHandler):
.. do_GET = do_decorate(super().do_GET)
That generates the following error:
SystemError: super(): __class__ cell not found
So I guess that when super() is called in the context of a class def
rather than that of a method def, it doesn't have the information it
needs. Now I'll probably just say:
do_GET = do_decorate(CGIHTTPRequestHandler.do_GET)
but I wonder if there is a "correct" way to do this instead? Thanks!