Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les méthodes spéciales, utilité ?

    11 février 2016 à 14:12:53

    Bonjour,

    Le tuto présent sur OC dit à propos des méthodes spéciales : "Les méthodes spéciales permettent d'influencer la manière dont Python accède aux attributs d'une instance et réagit à certains opérateurs ou conversions."

    Ok d'accord si on veut. Mais en soit, je peux faire la même chose avec une méthode standard dans mon objet, que ce soit getter/setter/comparaison ou autre. Je ne comprends donc pas trop l'interet de ce type de méthode, si quelqu'un peut m'éclairer.

    Car si je prend l'exemple du getter, soit j'aurais une property si j'ai besoin d'une encapsulation, soit je m'en fiche et je fais direct objet.attribut en dehors de ma classe pour y avoir accès.

    Merci d'avance

    -
    Edité par Kraguesh 11 février 2016 à 14:16:04

    • Partager sur Facebook
    • Partager sur Twitter
      11 février 2016 à 14:29:42

      En fait les méthodes spéciales sont appelées implicitement. Par exemple lors d'une multiplication (__mul__), d'une addition (__add__), ... Tu les utilises constamment s'en t'en rendre compte ;).

      Avec une méthode standard, tu es obligé d'appeler la méthode explicitement (ou de faire un truc compliqué pour ne pas le faire). Et puis (c'est à approfondir) à mon avis ça sert énormément pour faire du duck typing (i.e. on se fout de la classe, ce qui nous intéresse c'est de savoir si l'objet dispose de la méthode). Mais bon là je disgresse vers quelque chose que je maîtrise peu :p

      • Partager sur Facebook
      • Partager sur Twitter
      Précepte: Le mieux est l'ennemi du bien
        11 février 2016 à 14:41:24

        Alors je comprends bien que certaines de ces méthodes spéciales sont présente dans l'objet "object" et qu'elles sont appelées indirectement, mais pour reformuler, quelle utilité de les surcharger ? Ca revient au même de le faire dans une méthode standard.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          11 février 2016 à 15:14:20

          mais pour reformuler, quelle utilité de les surcharger ?

          Modifier le comportement initial et naturel de la méthode.

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            11 février 2016 à 15:15:23

            Les méthodes spéciales d'accès aux attributs ne sont qu'une petite partie des méthodes spéciales. De mon point de vu aussi, leur utilité se limite à la méta-programmation (vaste sujet), mais ne trouve, à priori, aucun intérêt en dehors de ce contexte particulier.

            En revanche, les accesseurs, qui ne sont pas des méthodes spéciales, sont utilisés pour limiter et contrôler la manière d'avoir, de modifier et de supprimer des données.

            class Person:
            
                def __init__(self, name, age, ...):
                    ...
            
                @property # getter
                def age(self):
                    return self._age
                @age.setter
                def age(self, value):
                    if not isinstance(value, int):
                        raise TypeError("'age' must be an integer")
                    elif value < 0:
                        raise ValueError("'age' must be null or positive")
                    self._age = value
            

            -
            Edité par Anonyme 11 février 2016 à 15:20:10

            • Partager sur Facebook
            • Partager sur Twitter
              11 février 2016 à 16:06:24

              Kraguesh a écrit:

              Ca revient au même de le faire dans une méthode standard.


              Ça revient au même oui, mais comme le souligne oldP tu gardes un comportement naturel. Imaginons que tu implémentes une classe Date. De cette classe, tu aimerais pouvoir additionner 2 instances. Tu ferais plutôt date1.addition(date2) ou plus naturellement date1 + date2? Le résultat sera le même, mais tu as gagné en confort ;)

              • Partager sur Facebook
              • Partager sur Twitter
              Précepte: Le mieux est l'ennemi du bien

              Les méthodes spéciales, utilité ?

              × 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