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