Pourquoi il faut ajouter les __ dans la deuxième version en Python?
Précisément parce que tu n'es pas censé appeler cette méthode toi-même mais utiliser la fonction abs() à la place ;)
Python essaie de séparer protocole interne et API publique :
- le protocole interne, c'est mon_entier.__abs__()
- l'API publique, c'est abs(mon_entier) qui appelle en sous-main la méthode mon_entier.__abs__()
Dans un cas simple on ne voit pas trop la différence, mais ça se justifie dans des cas plus complexes (par exemple la transformation en chaîne unicode via unicode(objet) peut appeler objet.__str__() ou objet.__unicode__() selon que l'un ou l'autre est défini).
C'est utilisé aussi pour les opérateurs. Par exemple "a + b" appelle a.__add__(b).
[^] # Re: troll de noel
Posté par Antoine . En réponse à la dépêche Ruby 1.9.0 est sorti pour Noël. Évalué à 2.
Précisément parce que tu n'es pas censé appeler cette méthode toi-même mais utiliser la fonction abs() à la place ;)
Python essaie de séparer protocole interne et API publique :
- le protocole interne, c'est mon_entier.__abs__()
- l'API publique, c'est abs(mon_entier) qui appelle en sous-main la méthode mon_entier.__abs__()
Dans un cas simple on ne voit pas trop la différence, mais ça se justifie dans des cas plus complexes (par exemple la transformation en chaîne unicode via unicode(objet) peut appeler objet.__str__() ou objet.__unicode__() selon que l'un ou l'autre est défini).
C'est utilisé aussi pour les opérateurs. Par exemple "a + b" appelle a.__add__(b).