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

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?

117531 次浏览

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

The super function is back-ported.

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".

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()

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.

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