Partage
  • Partager sur Facebook
  • Partager sur Twitter

Appeler une fonction de la classe qui nous appelle

Sujet résolu
    16 juillet 2022 à 14:31:07

    Bonjour,

    Je suis vraiment perdu. Malgrès mes recherches sur internet je n'ai rien trouvé.

    Mon probleme est assez "simple": J'aimerais appeler une fonction de la classe qui a appelé la fonction courante. Un shéma sera surement plus explicatif:

    En python cela donne:

    class Classe1():
        def __init__(self):    
            self.variable1 = 1
            self.classe_2 = Classe2()
            
            self.fonction1()
        
        def fonction1(self):
            print("Fonction1")
            print("Appel de: Fonction3")
            self.classe_2.fonction2()
    
        def fonction3(self):
            print("Fonction3")
            self.variable1 = 3
            print(self.variable1)
    
    class Classe2():
        def __init__(self):
            self.variable2 = 1
        
        def fonction2():
            print("Fonction3")
            print("Appel de: Fonction2")
            # C'EST ICI LE PROBLEME: JE NE SAIS PAS QUOI METTRE
            # example: "classe_1.fonction3()"  <= Ne marche pas (Normal)
    
    classe_1 = Classe1()   # Demarage

    Merci d'avance pour toutes les pistes que vous m'indiquerez.

    • Partager sur Facebook
    • Partager sur Twitter
      16 juillet 2022 à 15:04:33

      foncition1 et fonction3 sont des méthodes de l'instance classe_1 de Classe1 alors que fonction3 n'est que simple fonction.

      Dans tous les cas, pour appeler une méthode d'une instance, il va falloir pouvoir accéder a cette instance via une variable ou un attribut. Exemple:

      class Classe2():
          def __init__(self):
              self.variable2 = 1
           
          def fonction2(self, classe1):
              print("Fonction3")
              print("Appel de: Fonction2")
              classe1.fonction3()

      Et pour que çà marche l'appelant doit passer le paramètre qui va bien:

          def fonction1(self):
              print("Fonction1")
              print("Appel de: Fonction3")
              self.classe_2.fonction2(self)

      non testé.


      • Partager sur Facebook
      • Partager sur Twitter
        16 juillet 2022 à 15:15:40

        Merci pour votre réponse rapide.

        Le probleme c'est que en essayant de mettre 

        classe1.fonction3()

        J'ai comme erreur: "NameError: name 'classe_1' is not defined. Did you mean: 'Classe1'?". Python ne trouve pas la variable qui contient la classe 1.

        • Partager sur Facebook
        • Partager sur Twitter
          16 juillet 2022 à 15:46:26

          !!! a écrit:

          Merci pour votre réponse rapide.

          Le probleme c'est que en essayant de mettre 

          classe1.fonction3()

          J'ai comme erreur: "NameError: name 'classe_1' is not defined. Did you mean: 'Classe1'?". Python ne trouve pas la variable qui contient la classe 1.

          Me montrer une ligne de code où est écrit classe1 et un message d'erreur qui mentionne classe_1... montre un certain manque de pratique. Dommage lorsqu'on aborde la POO...

          -
          Edité par mps 16 juillet 2022 à 15:46:43

          • Partager sur Facebook
          • Partager sur Twitter
            16 juillet 2022 à 16:03:12

            Je viens de me rendre compte de mon erreur.

            Je voulais en fait mettre:

            classe_1.fonction3()

            où ici "classe_1" pointe vers la variable "classe_1" qui elle même contient l'instance de la Classe1 (si j'ai bien tout compris).

            • Partager sur Facebook
            • Partager sur Twitter
              16 juillet 2022 à 16:41:30

              J'aurais pu écrire:

                  def fonction2(self, v):
                      print("Fonction3")
                      print("Appel de: Fonction2")
                      v.fonction3()

              si la méthode fonction2 est appelée avec un v en paramètre, ce v sera variable locale et il n'y aura pas de NameError.... peut être un AttributeError si l'objet v n'est pas une instance de Classe1 (où ayant une méthode "fonction3")... mais ce qui est dans v est de la responsabilité de l'appelant.

              • Partager sur Facebook
              • Partager sur Twitter
                16 juillet 2022 à 18:41:31

                Ca marche si je passe en parametre (ici: "v"), la methode "self" de l'instance Classe2.

                Maintenant mon programme marche.

                Merci beaucoup pour votre aide et vos réponses rapides !

                • Partager sur Facebook
                • Partager sur Twitter

                Appeler une fonction de la classe qui nous appelle

                × 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