extender method
Simon Forman
rogue_pedro at yahoo.com
Wed Jul 26 12:44:36 EDT 2006
davehowey at f2s.com 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
More information about the Python-list
mailing list