missing 1 required positional argument: 'self'
Python
Erreur courante
Explication
L'erreur `TypeError: method() missing 1 required positional argument: 'self'` survient quand vous appelez une **méthode sur la classe elle-même** au lieu d'une **instance**. Le paramètre `self` représente l'instance ; il est rempli automatiquement seulement quand vous appelez la méthode sur un objet créé avec `MaClasse()`.
```python
class Compteur:
def increment(self):
self.valeur += 1
Compteur.increment() # appelé sur la classe, pas sur une instance
# TypeError: increment() missing 1 required positional argument: 'self'
```
Causes courantes
- **Appel sur la classe** (`Compteur.increment()`) au lieu d'une instance. - **Oubli des parenthèses d'instanciation** : `c = Compteur` (référence la classe) au lieu de `c = Compteur()`. - **Méthode qui devrait être statique** mais ne l'est pas déclarée.
1. Créez une instance, puis appelez la méthode dessus
c = Compteur() # ✅ instanciation (avec les parenthèses)
c.increment() # self est rempli automatiquement
2. Si la méthode n'a pas besoin de l'instance, rendez-la statique
class Maths:
@staticmethod
def carre(x):
return x * x
Maths.carre(4) # ✅ pas de self requis
3. Pour agir sur la classe, utilisez @classmethod
class Compteur:
total = 0
@classmethod
def reset(cls):
cls.total = 0
Compteur.reset() # ✅ cls au lieu de self
Comment prevenir cette erreur
- **Instanciez toujours** avec les parenthèses : `objet = MaClasse()`.
- **Choisissez le bon décorateur** : `@staticmethod` (aucun accès à l'instance/classe), `@classmethod` (accès à la classe).
- 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
Pourquoi `c = Compteur` (sans parenthèses) pose-t-il problème ?
Sans parenthèses, `c` référence la **classe** elle-même, pas une instance. `c.increment()` revient alors à `Compteur.increment()` sans `self`. Ajoutez les parenthèses : `c = Compteur()`.
Quand utiliser `@staticmethod` plutôt qu'une méthode normale ?
Quand la méthode n'utilise ni `self` (l'instance) ni `cls` (la classe) : c'est une simple fonction logée dans la classe pour l'organisation. Elle s'appelle alors directement sur la classe.