TypeError: super() takes at least 1 argument (0 given) error is specific to any python version?

Question:

I’m getting this error

TypeError: super() takes at least 1 argument (0 given)

using this code on python2.7.11:

class Foo(object):
    def __init__(self):
        pass

class Bar(Foo):
    def __init__(self):
        super().__init__()

Bar()

The workaround to make it work would be:

class Foo(object):
    def __init__(self):
        pass

class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()

Bar()

It seems the syntax is specific to python 3. So, what’s the best way to provide compatible code between 2.x and 3.x and avoiding this error happening?

Asked By: BPL

||

Answers:

You can use the future library to have a Python2/Python3 compatibility.

The super function is back-ported.

Answered By: Laurent LAPORTE

Yes, the 0-argument syntax is specific to Python 3, see What’s New in Python 3.0 and PEP 3135 — New Super.

In Python 2 and code that must be cross-version compatible, just stick to passing in the class object and instance explicitly.

Yes, there are “backports” available that make a no-argument version of super() work in Python 2 (like the future library) but these require a number of hacks that include a full scan of the class hierarchy to find a matching function object. This is both fragile and slow, and simply not worth the “convenience”.

Answered By: Martijn Pieters

This is because of version of python. Check your python version with [python –version] it might be 2.7

In 2.7 use this [ super(baseclass, self).__init__() ]

class Bird(object):
    def __init__(self):
        print("Bird")

    def whatIsThis(self):
        print("This is bird which can not swim")

class Animal(Bird):
    def __init__(self):
        super(Bird,self).__init__()
        print("Animal")

    def whatIsThis(self):
        print("THis is animal which can swim")

a1 = Animal()
a1.whatIsThis()

> In 3.0 or more use this [ super().__init__()]

class Bird(object):
    def __init__(self):
        print("Bird")

    def whatIsThis(self):
        print("This is bird which can not swim")

class Animal(Bird):
    def __init__(self):
        super().__init__()
        print("Animal")

    def whatIsThis(self):
        print("THis is animal which can swim")

a1 = Animal()
a1.whatIsThis()
Answered By: Viraj Wadate

Your default python --version is probably python2, you need to switch to python3 to use this syntax, to do so paste the following command in your terminal.

sudo update-alternatives --config python

If you get the error “no alternatives for python” then set up an alternative yourself with the following command:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

then check your python version with

python --version

if you get a version 3.+ then your problem is solved.

Answered By: Manzur Alahi

for python 3.6
super(Bird,self).init() not working
super(Animal,self).init() worked for me.

Answered By: Hüma
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.