SocketServer.BaseRequestHandler and __init__/super()
Tim Chase
python.list at tim.thechases.com
Thu May 17 20:32:18 EDT 2012
Sparring with a little sandbox/test code (in 2.6, FWIW), I'm trying
to set up some instance variables in my __init__ but keep hitting my
head against the wall.
Initially, I had something of the form
class MyServer(SocketServer.BaseRequestHandler):
def __init__(self, *args, **kwargs):
self.foo = "some default"
super(MyServer, self).__init__(*args, **kwargs)
but, because SocketServer.BaseRequestHandler is an old-style class,
it barfed with the classic "TypeError: super() argument 1 must be
type, not classobj"
So I tossed in "object" to the class hierarchy:
class MyServer(object, SocketServer.BaseRequestHandler):
def __init__(self, *args, **kwargs):
self.foo = "some default"
super(MyServer, self).__init__(*args, **kwargs)
but now because it tries to pass *args/**kwargs into object.__init__
I get a "TypeError: object.__init__() takes no parameters"
I know I can just force it with
class MyServer(SocketServer.BaseRequestHandler):
def __init__(self, *args, **kwargs):
self.foo = "some default"
SocketServer.BaseRequestHandler.__init__(self, *args, **kwargs)
but I want to be sure there's not some more pythonicly proper way to
go about it. Any thoughts on this? (other than "SocketServer should
have inherited from object which is a 2.x best-practice")
-tkc
More information about the Python-list
mailing list