python python-2.7 python-2.x

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



python-2.7 python-2.x (2)

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 sintaxis 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?


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

La super función es back-port.


Sí, la sintaxis 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".