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?
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".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With