[EMAIL PROTECTED] wrote: > 'Learning Python' by Lutz and Ascher (excellent book by the way) > explains that a subclass can call its superclass constructor as > follows: > > class Super: > def method(self): > # do stuff > > class Extender(Super): > def method(self): > Super.method(self) # call the method in super > # do more stuff - additional stuff here > > > > I'm trying to use this for a superclass called 'component' in the > constructor. I have different types of component (let's say for > arguments sake resistor, capacitor etc). When I instantiate a new > resistor, say, I want the constructor to call the constructor within > the component superclass, and then add some resistor-specific stuff. > > Now, this is fine using the above code. Where I'm struggling is with > argument passing. The following, for example, doesn't seem to work: > > class Super: > def __init__(self, **kargs): > self.data = kargs > > class Extender(Super): > def __init__(self, **kargs): > Super.__init__(self, kargs) # call the constructor method in Super > # do additional extender-specific stuff here > > What am I doing wrong? I get: > TypeError: __init__() takes exactly 1 argument (2 given) > WARNING: Failure executing file: <main.py> > > Dave
Try this: class Extender(Super): def __init__(self, **kargs): Super.__init__(self, **kargs) # call the constructor method in Super (add two asterisks to the call.) Observe, the following script: def a(*a, **b): return a, b print a(**{'arg':2}) print a(arg=2) print a({'arg':2}) # Prints: ((), {'arg': 2}) ((), {'arg': 2}) (({'arg': 2},), {}) HTH, ~Simon -- http://mail.python.org/mailman/listinfo/python-list