super() in class defs?
Jess Austin
jess.austin at gmail.com
Wed May 25 13:54:11 EDT 2011
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!
More information about the Python-list
mailing list