Partage
  • Partager sur Facebook
  • Partager sur Twitter

classe et retour d'input

Sujet résolu
    6 janvier 2022 à 6:29:18

    Bonjour,

    je souhaite avoir une classe qui retourne un input, puis me servir plusieurs fois de ce résultat, dans d'autres fonctions. Le but étant de ne demander l’input qu’une fois, puis de récupérer son return pour plusieurs fonctions.

    (Quelqu’un ici m’avait montré comment le faire sans classe, mais avec des constantes, et ça marchait très bien, mais j’aurais besoin de le faire avec une classe.)

    Mon test marche ici, mais le problème c’est que ça lance automatiquement mon input, sans même lancer le ‘bonjour’ d’abord(dans mon vrai code, ça pose donc un gros pb).

    Vous sauriez comment éviter ça, s’il vous plait ?

    class ClassTest:
        def __init__(self, input_test=input("?")):
            self.input_test = input_test
    
        def __str__(self):
            return self.input_test
    
    
    def test():
        print(ClassTest())
    
    
    def test2():
        print(ClassTest())
    
    
    print("bonjour")
    test()
    test2()
    print(ClassTest().input_test)

    -
    Edité par DamienZeh 6 janvier 2022 à 6:31:46

    • Partager sur Facebook
    • Partager sur Twitter
      6 janvier 2022 à 7:45:30

      Le problème est que tu appelles input dans la valeur de défaut. Ça pourrait être autre chose comme ""
      Où bien tu le donnes explicitement au premier appel, ou bien tu donnes une autre valeur pour les autres appels.
      __init__ doit retourner None, pas une chaîne.
      Tu dois écrire une autre fonction/méthode dans ta classe pour récupérer la valeur.

      exemple qui marche:

      class Test:
          def __init__(self, val=""):
              self.val = val
          def recup(self):
              return self.val
      test=Test(input(">"))
      print(test.recup())

      print(test.val)   # c'est moins POO

      J'auerais pu mettre le input() comme valeur de défaut et ne pas le mettre dans l'instanciation.

      -
      Edité par PierrotLeFou 6 janvier 2022 à 8:06:44

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        6 janvier 2022 à 9:12:11

        je verrais plutôt ça :

        class ClassTest:
            def __init__(self):
                self.input_test = input("?")
         
            def __str__(self):
                return self.input_test



        • Partager sur Facebook
        • Partager sur Twitter
          6 janvier 2022 à 10:07:27

          Thelinekioubeur, si je fais ça, à chaque appel, ça me demandera de nouveau de taper un input.

          PierrotLeFou, ok mais c’est un peu le même problème, pour :

          test=Test(input(">"))
          print(test.recup())

          Ca va marcher, mais dès que je vais devoir récupérer le retour de ça dans une autre fonction, je vais devoir retaper l’input.

          • Partager sur Facebook
          • Partager sur Twitter
            6 janvier 2022 à 11:39:51

            le fait de faire ClassTest() fait un appel à son __init__, donc à input 

            avec une variable comme le propose PierrotLeFou, tu ne l'a qu'une fois, tu passes ensuite ta variable en paramètres aux fonctions qui ont besoin de la valeur (mais en fait, pas besoin de créer une classe pour ça à mon avis)  ou que ta variable qui reçoit l'input soit une variable globale (en général, on préfère éviter)

            • Partager sur Facebook
            • Partager sur Twitter
              6 janvier 2022 à 12:18:03

              DamienZeh a écrit:

              Ca va marcher, mais dès que je vais devoir récupérer le retour de ça dans une autre fonction, je vais devoir retaper l’input.

              Chaque ClassTest() va créer une instance différente de ClassTest qui n'aura en commun avec la précédente que ce qui sera passé en argument à l'__init__

              Si on ne veut pas refaire une saisie... il faudra la faire une fois et la passer autant de fois que d'instances créées. Et si on ne veut qu'une instance... à vous de voir et de faire fonctionner ce que vous voulez

              • Partager sur Facebook
              • Partager sur Twitter
                6 janvier 2022 à 12:55:41

                Ah oui, pardon, j'avais mal compris. Oui, il suffit de s'en servir dans la variable une fois, et la mettre en paramètre des fonctions qui en ont besoin, merci c'est super.

                En revanche, je dois m'en servir sur plusieurs modules, et chaque module n'est composé que de classes, donc pas de variable en dehors de mes classes.

                Donc j'essaie de mettre cette variable dans une fonction ou dans une classe, mais je dois mal m'y prendre. Ou sinon, autre méthode, est-ce correct si je crée module à part, juste pour cette variable, et de l'importer ensuite dans mes autres modules ?  

                • Partager sur Facebook
                • Partager sur Twitter
                  6 janvier 2022 à 13:31:55

                  DamienZeh a écrit:

                  Donc j'essaie de mettre cette variable dans une fonction ou dans une classe, mais je dois mal m'y prendre. Ou sinon, autre méthode, est-ce correct si je crée module à part, juste pour cette variable, et de l'importer ensuite dans mes autres modules ?  


                  On fait un peu ce qu'on veut... reste à savoir si ça va résoudre le problème (qui n'a pas été exprimé) et qu'on sache mettre en œuvre la solution.

                  note: classes et modules, c'est juste des outils pour ranger le code. ça n'apporte pas de fonctionnalité à l'application (d'où l'important de savoir ce qu'on veut) qui pourra être réalisée avec ou sans (un code qui marche sans classe, c'est mieux qu'un code qu'on ne maîtrise plus parce qu'on a voulu y mettre des classes et qu'on s'en sort plus).

                  -
                  Edité par mps 6 janvier 2022 à 13:32:28

                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 janvier 2022 à 14:11:40

                    Oui, je vois bien qu'on peut facilement s'y perdre(c'est mon premier projet en poo).:)

                    OK, je vais rester sur mon idée de module à part pour cette variable, pour faire au plus simple, pour l'instant.

                    Merci pour l'aide, heureusement que vous êtes la.;)

                    -
                    Edité par DamienZeh 6 janvier 2022 à 14:13:44

                    • Partager sur Facebook
                    • Partager sur Twitter

                    classe et retour d'input

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown