Partage
  • Partager sur Facebook
  • Partager sur Twitter

méthode special __add__

Sujet résolu
    24 mars 2019 à 18:11:34

    Bonjour,

    Comme des milliers avant je me suis attaqué au cours de Vincent Le Goff (Un grand merci au passage).

    J'en suis au chapitres des méthodes spéciales et j'ai une question sur l'exemple de redéfinition de la méthode __add__.

    Il y a l'exemple suivant :

    def __add__(self, objet_a_ajouter):
            """L'objet à ajouter est un entier, le nombre de secondes"""
            nouvelle_duree = Duree()
            # On va copier self dans l'objet créé pour avoir la même durée
            nouvelle_duree.min = self.min
            nouvelle_duree.sec = self.sec
            # On ajoute la durée
            nouvelle_duree.sec += objet_a_ajouter
            # Si le nombre de secondes >= 60
            if nouvelle_duree.sec >= 60:
                nouvelle_duree.min += nouvelle_duree.sec // 60
                nouvelle_duree.sec = nouvelle_duree.sec % 60
            # On renvoie la nouvelle durée
            return nouvelle_duree

    Pourquoi créer un nouvel objet "nouvelle_duree" au lieu  d'utilier self ?

    Avec ces lignes cela fonctionne aussi :

    def __add__(self, valeur):
        	"""Rédéfinition de la méthode spéciale "+" """
        	self.sec += valeur
        	if self.sec >= 60:
        		self.min += self.sec//60
        		self.sec = self.sec%60
        	return self

    Est-ce une hérésie, une autre méthode possible ?

    Merci pour votre aide,

    Loïck

    Niveau python actuel : Larve aveugle

    • Partager sur Facebook
    • Partager sur Twitter
      24 mars 2019 à 19:21:08

      Pas d'hérésie !

      L'eau-Hic a écrit:

      Pourquoi créer un nouvel objet "nouvelle_duree" au lieu  d'utilier self ?

      Parce-qu'on a envie de garder l'ancienne instance pouvant être utile pour d'autres éventuels calculs de dates.

      L'eau-Hic a écrit:

      Avec ces lignes cela fonctionne aussi :

      def __add__(self, valeur):
          	"""Rédéfinition de la méthode spéciale "+" """
          	self.sec += valeur
          	if self.sec >= 60:
          		self.min += self.sec//60
          		self.sec = self.sec%60
          	return self

      L'ajout provoque une mise à jour de l'objet, c'est à dire qu'on prend l'ancienne date, on y ajoute une valeur, et la date est mise à jour.

      • 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)

        24 mars 2019 à 20:40:16

        somme = a + b

        est équivalent à

        somme = a.__add__(b)

        Du coup, si tu modifie self, le simple fait de faire une addition va modifier a, ce qui n'est pas logique du tout.

        • Partager sur Facebook
        • Partager sur Twitter
          30 mars 2019 à 14:00:24

          C'est super clair merci pour vos explications !

          • Partager sur Facebook
          • Partager sur Twitter

          méthode special __add__

          × 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