Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilité des properties ???

    20 février 2020 à 23:08:18

    Hello !

    Quelqu'un aurait compris l'utilité des properties ? Sincèrement je ne vois aucun intérêt à les utiliser. Dans tous les codes que je fais, que j'ajoute la ligne qui les définie ou pas ça ne change rien.

    • Partager sur Facebook
    • Partager sur Twitter
      21 février 2020 à 0:47:10

      C'est utile quand on veut faire autre chose que juste changer la valeur et/ou modifier le comportement lorsque l'utilisateur de la classe veut changer la valeur de certains attributs. Ça permet de définir des méthodes getters et setters pour ça.

      Il y a quelques explications en français ici : https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/232793-definissez-des-proprietes

      Si tu lis l'anglais, je trouve cette source plus intéressante : https://www.programiz.com/python-programming/property

      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

        21 février 2020 à 23:17:52

        Justement, quand je lance ce code :

        class Personne:
        
            def __init__(self, nom, prenom):
                self.nom = nom
                self.prenom = prenom
                self.age = 33
                self._lieu_residence = "Paris"
        
            def _get_lieu_residence(self):
                print("On accède à l'attribut lieu_residence !")
                return self._lieu_residence
        
            def _set_lieu_residence(self, nouvelle_residence):
                print("Attention, il semble que {} déménage à {}.".format(self.prenom, nouvelle_residence))
                self._lieu_residence = nouvelle_residence
        
            lieu_residence = property(_get_lieu_residence, _set_lieu_residence)
        
        
        p1 = Personne("Doe", "John")
        p1._get_lieu_residence()
        p1._set_lieu_residence("Berlin")

        J'obtiens ceci en sortie :

        On accède à l'attribut lieu_residence !
        Attention, il semble que John déménage à Berlin.
        
        Process finished with exit code 0

        Et si je relance sans la ligne avec property :

        class Personne:
        
            def __init__(self, nom, prenom):
                self.nom = nom
                self.prenom = prenom
                self.age = 33
                self._lieu_residence = "Paris"
        
            def _get_lieu_residence(self):
                print("On accède à l'attribut lieu_residence !")
                return self._lieu_residence
        
            def _set_lieu_residence(self, nouvelle_residence):
                print("Attention, il semble que {} déménage à {}.".format(self.prenom, nouvelle_residence))
                self._lieu_residence = nouvelle_residence
        
        
        p1 = Personne("Doe", "John")
        p1._get_lieu_residence()
        p1._set_lieu_residence("Berlin")

        J'obtiens exactement la même chose !

        On accède à l'attribut lieu_residence !
        Attention, il semble que John déménage à Berlin.
        
        Process finished with exit code 0

        Donc je ne vois vraiment pas le plus que cela apporte. Ou alors je ne les utilise pas à leur plein potentiel...



        -
        Edité par Autechre 21 février 2020 à 23:20:05

        • Partager sur Facebook
        • Partager sur Twitter
          22 février 2020 à 0:47:08

          C'est parce que tu utilises les méthodes privées.

          Essaie le dernier exemple de  https://www.programiz.com/python-programming/property#dig

          Tu appelles alors directement "temperature". 

          • Partager sur Facebook
          • Partager sur Twitter
            22 février 2020 à 2:01:02

            Tu ne les utilise pas du tout en fait, c'est pour ça que tu ne vois pas de différence.

            Le but c'est de ne pas utiliser explicitement les getters et setters, ils sont automatiquement exécutés quand on accède à l'attribut. On utilise le décorateur en général.

            • Partager sur Facebook
            • Partager sur Twitter

            Blond, bouclé, toujours le sourire aux lèvres...

              22 février 2020 à 13:53:42

              Autechre a écrit:

              Hello !

              Quelqu'un aurait compris l'utilité des properties ? Sincèrement je ne vois aucun intérêt à les utiliser. Dans tous les codes que je fais, que j'ajoute la ligne qui les définie ou pas ça ne change rien.


              Ça permet de d'appeler une méthode comme si c'était une propriété normale, alors qu'en fait c'est une méthode qui contient du code à exécuter alors que la propriété est définie.

              Des explication ICI.

              • Partager sur Facebook
              • Partager sur Twitter

              Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
              La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                23 février 2020 à 19:21:10

                Merci pour vos réponses ! Je me suis rendu compte que j'avais été embrouillé par un paragraphe du cours Openclassrooms qui disait qu'avec l'encapsulation, il ne fallait pas écrire : p1.lieu_residence mais p1.get_lieu_residence() comme en Java… alors que le prof ne parlait pas de Python à ce moment-là mais uniquement de Java justement, et ça je ne l'avais pas compris !

                Par contre, il y a quelque chose que je ne suis pas sûr d'avoir exactement compris c'est l'utilité du décorateur @property. Il sert juste à indiquer que la fonction ci-dessous est un getter, un setter, un destructeur ou un helper ou son rôle va plus loin que ça ?

                • Partager sur Facebook
                • Partager sur Twitter
                  23 février 2020 à 19:37:55

                  Pourtant toutes ces réponses sont dans le lien que je t'ai partagé...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                  La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                    25 février 2020 à 23:37:05

                    fred1599 => Désolé, comme j'étais débordé je n'avais pas eu le temps de regarder ton lien. Merci ! J'ai fini par comprendre grâce à ton lien et à celui de tsez ! ;)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Utilité des properties ???

                    × 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