TypeError: __init__() takes X positional arguments but ...

C_Dedev -  
 C_Dedev -
Bonjour,

Lorsque je mets une valeur mon terminal m'indique qu'il y a une valeur de trop
Lorsque je retires cette valeur il me dit qu'il en manque une.

La valeur 5 (passée en 3e paramètre de
kid()
) est la valeur qui pose problème :

def main():
    class parent:

        def __init__(self, var1, ):
            self.var1 = 1
            print(var1)

    class kid(parent):

        def __init__(self, var3, var4, var1, ):
            super().__init__(self, var1, )
            self.var3 = var3
            self.var4 = var4

            print(var1, var3, var4)

    result = kid(1, 2, 5)

if __name__ == '__main__':
    main()

8 réponses

  1. Utilisateur anonyme
     
    Bonjour
    En Python, l’indentation est primordiale, or par défaut le site ne la conserve pas.
    Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
    On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
    1
    1. C_Dedev
       
      j'ai pas pu modifier la publication donc le code est juste en dessous en réponse
      0
  2. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Bonjour,

    "il se contredit"
    En fait un programme ne se contredit jamais, il fait exactement ce que tu lui a dit de faire :-)
    1
    1. C_Dedev
       
      ca je sais mais ca m'aide pas
      0
  3. jee pee Messages postés 31869 Date d'inscription   Statut Modérateur Dernière intervention   9 975
     
    Bonjour,

    Une question toute bête, il y a peut être une raison, mais pourquoi les paramètres sur la définition de tes fonctions se terminent par une virgule sans rien derrière ?

    0
    1. C_Dedev
       
      c'est simplement une habitude pour pouvoir ajouter quelque chose juste après (c'est la que je me rends compte que ca sert a que dalle)
      mais ca n'a jamais posé problème jusque là
      0
  4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    Ces deux erreurs sont présentes dans ton code, à des endroits différents.
    J'y ai vu trois autres erreurs.
    0
    1. C_Dedev
       
      quelles deux erreurs ?

      si il y a une balise de code ca ne me l'affiche pas...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. C_Dedev
     
    def main():
        class parent:
    
            def __init__(self, var1, ):
                self.var1 = 1
                print(var1)
    
        class kid(parent):
    
            def __init__(self, var3, var4, var1, ):
                super().__init__(self, var1, )
                self.var3 = var3
                self.var4 = var4
    
                print(var1, var3, var4)
    
        result = kid(1, 2, 5)
    
    
    if __name__ == '__main__':
        main()
    
    0
    1. Utilisateur anonyme
       
      As tu l'impression que le pavé gris ressemble à l'exemple de code à la fin du tuto?
      0
      1. Utilisateur anonyme > Utilisateur anonyme
         
        As tu lu le message de jee pee?
        0
      2. C_Dedev > Utilisateur anonyme
         
        oui (et j'y ait répondu)
        0
      3. Utilisateur anonyme > C_Dedev
         
        et donc t'as pas essayé sans les virgules?
        0
  7. Utilisateur anonyme
     

    lorsque je mets une valeur mon terminal m'indique qu'il y a une valeur de trop
    lorsque je retires cette valeur il me dit qu'il en manque une.

    le 5 en gras italique souligné est la valeur qui pose problème


    Quand je teste de mon coté, sans les virgules (au moins pour écrire du code propre), je ne fais pas le même constat.
    Tu devrais bien lire les indications de ton IDE dans chaque cas.

    0
    1. C_Dedev Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
       
      Rebonjour,
      De mon coté, que j'enlève les virgules ou pas la réponse est toujours la même.
      Pour confirmer que j'ai bien compris, j'ai passé les réponses au traducteur.
      (Il semblerait que oui)
      Je peut vous envoyer les réponses fournies par mon IDE si cela peut vous aider.
      0
    2. Utilisateur anonyme > C_Dedev Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
       
      Oui tu peux les envoyer.
      0
    3. C_Dedev Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   > Utilisateur anonyme
       
      Sans la valeur problématique
      C:\Users\alan-\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/alan-/PycharmProjects/pythonProject/test.py
      Traceback (most recent call last):
        File "C:\Users\alan-\PycharmProjects\pythonProject\test.py", line 21, in <module>
          main()
        File "C:\Users\alan-\PycharmProjects\pythonProject\test.py", line 17, in main
          result = kid(1, 2, 5)
        File "C:\Users\alan-\PycharmProjects\pythonProject\test.py", line 11, in __init__
          super().__init__(self, var1)
      TypeError: __init__() takes 2 positional arguments but 3 were given
      
      Process finished with exit code 1
      
      


      Avec la valeur
      C:\Users\alan-\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/alan-/PycharmProjects/pythonProject/test.py
      Traceback (most recent call last):
        File "C:\Users\alan-\PycharmProjects\pythonProject\test.py", line 21, in <module>
          main()
        File "C:\Users\alan-\PycharmProjects\pythonProject\test.py", line 17, in main
          result = kid(1, 2)
      TypeError: __init__() missing 1 required positional argument: 'var1'
      
      Process finished with exit code 1
      


      IDE:PyCharm (2021.3.2)
      0
    4. Utilisateur anonyme > C_Dedev Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
       
      Tu écris
      le 5 en gras italique souligné est la valeur qui pose problème

      Mais ça n’est pas ce que te dit ton ide la première fois.
      0
    5. C_Dedev Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   > Utilisateur anonyme
       
      Je veux bien mais à ce que je sache l'endroit d'où viennent les valeurs c'est la ligne 17.
      Donc si vous voulez bien développer...
      0
  8. C_Dedev Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
     
    Je suis pas très fort en devinette mais comme ca je dirais que l'ide indique un problème a trois endroits dans le premier résultat et seulement 2 dans le deuxième

    a partir de là je peut définir en tant qu'amateur qui développe en pur code depuis 2 semaines
    (et qui donc par conséquent n'a peut être pas bien capté la façon dont l'ide s'exprime)
    soit il y a deux erreurs, une a la ligne 17 et une a la ligne 11 (scénario le plus probable au vu de votre réaction)
    soit il y a une erreur a la ligne 11 impliquant la ligne 17
    0
    1. Utilisateur anonyme
       
      Oui, c’est un peu ta seconde option.
      Maintenant que tu as commencé à regarder et pas juste jeter un coup d’œil, on peut commencer à t’expliquer.

      #cette ligne se passe de commentaires
      C:\Users\alan-\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/alan-/PycharmProjects/pythonProject/test.py
      
      #là l’IDE t’informe qu’il va te montrer les derniers appels, c’est à dire les étapes du code qu’il a exécutées et qui sautent d’un endroit à l’autre du code
      Traceback (most recent call last):
      #premier appel, à la.ligne 21
        File "C:\Users\alan-\PycharmProjects\pythonProject\test.py", line 21, in <module>
          main()
      #second appel à la ligne 17
        File "C:\Users\alan-\PycharmProjects\pythonProject\test.py", line 17, in main
          result = kid(1, 2, 5)
      #3eme appel à la ligne 1q
        File "C:\Users\alan-\PycharmProjects\pythonProject\test.py", line 11, in __init__
          super().__init__(self, var1)
      #et maintenant, il t’annonce l’erreur qu’il a rencontrée lors du 3eme appel
      TypeError: __init__() takes 2 positional arguments but 3 were given
      
      #et ici ce que ça donne sur le programme final: il s’est arrêté en disant « 1 » qui signifie ça n’a pas marché 
      Process finished with exit code 1
      
      
      0
    2. C_Dedev Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   > Utilisateur anonyme
       
      Si je suis pas trop con je devrais avoir compris
      mais reste a trouver comment arranger ca (et là!,je suis trop con)
      Ps:sur les deux semaines depuis lesquelles j'ai commencé le python il y a quand même trois jours de recherches sur le
      super().

      j'ai toujours pas compris !
      0
    3. Utilisateur anonyme > C_Dedev Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
       
      Un peu de lecture
      https://codes-sources.commentcamarche.net/forum/affich-10107769-message-a-tous-les-debutants-souvent-autodidactes
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > C_Dedev Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
       
      pourquoi utilises-tu ainsi des classes sans les comprendre?
      ne serait-il pas préférable de commencer avec des programmes plus simples?
      0
    5. Utilisateur anonyme > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      d'où le lien dans le message 24 ;)
      0
  9. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Bonjour,

    Ca marche mieux ainsi:
    def main():
        class parent:
    
            def __init__(self, var1):
                self.var1 = var1
    
        class kid(parent):
    
            def __init__(self, var1,var2,var3):
                super().__init__(var1)
    
                self.var2 = var2
                self.var3 = var3
    
            def __repr__(self):
             return('{} {} {}'.format(self.var1,self.var2,self.var3))
    
        result = kid(1,2,3)
        print(result)
    
    if __name__ == '__main__':
        main()
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ou:
      super().__init__( var1)
      0