Hi,

I am having trouble understanding how superclass calls work.  Here's
some code...

What version of Python are you using?

In Python 2.x, you MUST inherit from object to use super, and you MUST explicitly pass the class and self:

class ParentClass(object):
    def __init__(self, a, b, c):
        do something here

class ChildClass(ParentClass):
    def __init__(self, a, b, c):
        super(ChildClass, self).__init__(a, b, c)

In Python 3.x, all classes inherit from object and you no longer need to explicitly say so, and super becomes a bit smarter about where it is called from:

# Python 3 only
class ParentClass:
    def __init__(self, a, b, c):
        do something here

class ChildClass(ParentClass):
    def __init__(self, a, b, c):
        super().__init__(a, b, c)


I assume you are using Python 3.0 or 3.1. (If you're 3.0, you should upgrade to 3.1: 3.0 is s-l-o-w and no longer supported.)


Your mistake was to pass self as an explicit argument to __init__. This is not needed, because Python methods automatically get passed self:

    def __init__(self):
        super().__init__(self)

That has the effect of passing self *twice*, when __init__ expects to get self *once*, hence the error message you see:

When the super().__init__ line runs I get the error "__init__() takes
exactly 1 positional argument (2 given)"
Hi Steven, thanks for the reply.

Fortunately I am using Python 3.1, so I can use the super().__init__(a, b, c) syntax.

Regards,
Alan
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to