On Mar 9, 12:53 pm, "Rhodri James" <rho...@wildebst.demon.co.uk> wrote: > On Wed, 09 Mar 2011 01:00:29 -0000, Martin De Kauwe <mdeka...@gmail.com> > wrote: > > > class BaseClass(object): > > def __init__(self, a, b, c, d): > > self.a = a > > self.b = b > > self.c = c > > self.d = d > > > class NewClass(BaseClass): > > def __init__(self): > > super(NewClass, self).__init__(new) > > self.new = new > > print self.new > > Two things leap out immediately. First, BaseClass.__init__ takes four > parameters besides `self`, but when you call it you only give it one > parameter, `new`. It's not going to like that. Second, where did `new` > come from? It's not a parameter to NewClass.__init__, and it doesn't seem > to be a global. That's not going to work well either. > > However neither of these things are what the traceback is complaining > about. > > > if __name__ == "__main__": > > > A = PreviousClass(1, 2, 3, 4, 5) > > B = NewClass(1, 2, 3, 4, 5) > > > $ python test.py > > Traceback (most recent call last): > > File "model_data.py", line 29, in <module> > > B = NewClass(1, 2, 3, 4, 5) > > TypeError: __init__() takes exactly 1 argument (6 given) > > When you create your NewClass, you give it five parameters (1, 2, 3, 4, 5) > plus the implicit `self`, which is the "(6 given)" part of the message. > However NewClass.__init__ takes no parameters aside from `self` (i.e. it > "takes exactly 1 argument"). There's a mismatch between what you've told > NewClass.__init__ to expect and what you actually deliver to it. > > The point that may be confusing you is that NewClass.__init__ knows > nothing at all about BaseClass.__init__. It doesn't inherit parameters > from it or anything magical like that; you have to tell it everything. If > you want parameters to pass from NewClass.__init__ to BaseClass.__init__ > you will have to provide them somehow. In this case, I think what you > meant was something like this: > > class NewClass(BaseClass): > def __init__(self, a, b, c, d, new): > super(NewClass, self).__init__(a, b, c, d) > self.new = new > # etc > > -- > Rhodri James *-* Wildebeest Herder to the Masses
Yep that was it, I think I misunderstood and assumed it knew about stuff in the BaseClass constructor. All makes sense now! -- http://mail.python.org/mailman/listinfo/python-list