TypeError: super () toma al menos 1 argumento (0 dado) ¿el error es específico de cualquier versión de python?

Estoy recibiendo este error

TypeError: super () toma al menos 1 argumento (0 dado)

usando este código en python2.7.11:

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

La solución para que funcione sería:

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

Parece que la syntax es específica de python 3. Entonces, ¿cuál es la mejor manera de proporcionar código compatible entre 2.xy 3.x y evitar que ocurra este error?

Sí, la syntax de 0 argumentos es específica de Python 3, vea Lo nuevo en Python 3.0 y PEP 3135 – Nuevo Super .

En Python 2 y el código que debe ser compatible con versiones cruzadas, simplemente apéguese a pasar el objeto de clase y la instancia explícitamente.

Sí, hay “backports” disponibles que hacen que una versión sin argumentos de super() funcione en Python 2 (como la future biblioteca), pero requieren una serie de hacks que incluyen un análisis completo de la jerarquía de clases para encontrar una función coincidente objeto. Esto es frágil y lento, y simplemente no vale la “conveniencia”.

Puede usar la futura biblioteca para tener una compatibilidad Python2 / Python3.

La super función es de puerto trasero.

Esto es debido a la versión de python. Verifica tu versión de python con [python –version] podría ser 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()