takes 0 positional arguments but 1 was given
Python
Erreur courante
Explication
L'erreur `TypeError: method() takes 0 positional arguments but 1 was given` survient quand une fonction ou méthode reçoit **plus d'arguments qu'elle n'en accepte**. Pour une méthode, le cas classique est l'**oubli de `self`** dans la définition : Python passe automatiquement l'instance, qui devient alors un argument inattendu.
```python
class Compteur:
def increment(): # self oublié dans la définition
...
Compteur().increment() # l'instance est passée → 1 argument de trop
# TypeError: increment() takes 0 positional arguments but 1 was given
```
Causes courantes
- **`self` oublié** dans la définition d'une méthode d'instance. - **Appel d'une fonction** avec plus d'arguments que sa signature. - **Décorateur** qui modifie la signature attendue.
1. Ajoutez self à la méthode
class Compteur:
def increment(self): # ✅ self en premier paramètre
...
2. Alignez l'appel sur la signature
def saluer():
print("Bonjour")
saluer() # ✅ aucun argument
# saluer("x") # ❌ un argument de trop
3. Méthode sans instance : @staticmethod
Si la méthode n'a vraiment pas besoin de l'instance :
class Maths:
@staticmethod
def increment(x): # pas de self, mais accepte un argument
return x + 1
Comment prevenir cette erreur
- **Mettez toujours `self`** comme premier paramètre des méthodes d'instance.
- **Vérifiez la signature** d'une fonction avant de l'appeler.
- Un linter (`pylint`) signale les méthodes sans `self`.
- Référence : [docs.python.org — Classes](https://docs.python.org/fr/3/tutorial/classes.html).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Quelle différence avec « missing 1 required positional argument: 'self' » ?
C'est le symétrique : « takes 0... but 1 given » = vous avez oublié `self` dans la **définition** (la méthode n'attend rien mais reçoit l'instance) ; « missing... 'self' » = vous appelez la méthode **sur la classe** sans instance. Les deux tournent autour de `self`.
Quand utiliser `@staticmethod` ?
Quand la méthode n'utilise ni `self` ni `cls`. Elle peut alors accepter ses propres arguments sans recevoir l'instance, et s'appelle directement sur la classe.