Je reçois cette erreur
TypeError: super () prend au moins 1 argument (0 donné)
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 pour que cela fonctionne est la suivante:
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. Alors, quel est le meilleur moyen de fournir un code compatible entre les versions 2.x et 3.x et d'éviter cette erreur?
Oui, la syntaxe à 0 argument est spécifique à Python 3, voir Nouveautés de Python 3.0 et PEP 3135 - New Super .
Dans Python 2 et le code qui doit être compatible avec toutes les versions, tenez-vous-en à laisser explicitement l'objet et l'occurrence de la classe.
Oui, il existe des "backports" qui font que la version sans argument de super()
fonctionne dans Python 2 (comme dans la bibliothèque future
), mais ils nécessitent un certain nombre de piratages incluant a analyse complète de la hiérarchie des classes pour trouver un objet de fonction correspondant. Ceci est à la fois fragile et lent, et ne vaut tout simplement pas la "commodité".
C'est à cause de la version de python. Vérifiez votre version python avec la version [python --version] 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()
Votre valeur par défaut python --version
est probablement python2. Pour utiliser cette syntaxe, vous devez passer à python3. Pour ce faire, collez la commande suivante dans votre terminal.
Sudo update-alternatives --config python
Si vous obtenez l'erreur "pas d'alternative pour python", configurez vous-même une alternative avec la commande suivante:
Sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
puis vérifiez votre version python avec
python --version
si vous obtenez une version 3. +, votre problème est résolu.