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 contacter

Questions 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.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.