Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 217
BPL Avatar asked Aug 15 '16 21:08

BPL


1 Answers

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

like image 160
Martijn Pieters Avatar answered Oct 02 '22 21:10

Martijn Pieters