TypeError: super () prend au moins 1 argument (0 donné) l'erreur est spécifique à n'importe quelle version de python?
je reçois cette erreur
TypeError: super() prend au moins 1 argument (0)
en utilisant ce code sur python2.7.11:
class Foo(object):
def __init__(self):
pass
class Bar(Foo):
def __init__(self):
super().__init__()
Bar()
La solution de contournement pour le faire fonctionner serait:
class Foo(object):
def __init__(self):
pass
class Bar(Foo):
def __init__(self):
super(Bar, self).__init__()
Bar()
il semble que la syntaxe soit spécifique à python 3. Donc, quelle est la meilleure façon de fournir du code compatible entre 2.x et 3.x et éviter cette erreur?
2 réponses
Oui, le 0-argument de la syntaxe spécifique à Python 3, voir Quoi de neuf en Python 3.0 et PEP 3135 -- Nouveau Super.
dans Python 2 et le code qui doit être compatible avec les versions croisées, il suffit de passer dans l'objet class et l'instance explicitement.
Oui, il y a "backports" disponibles que faire d'un non-argument de la version de super()
travailler en Python 2 (comme le future
bibliothèque) mais ceux-ci nécessitent un nombre de hacks qui incluent un analyse complète de la hiérarchie de classe pour trouver un objet de fonction correspondant. C'est à la fois fragile et lent, et ne vaut tout simplement pas la "commodité".
Vous pouvez utiliser le avenir bibliothèque pour avoir une compatibilité Python2/Python3.
super la fonction est rétroportée.