185 votes

Objectif de la méthode __repr__ ?

def __repr__(self):
  return '<%s %s (%s:%s) %s>' % (
    self.__class__.__name__, self.urlconf_name, self.app_name,
    self.namespace, self.regex.pattern)

Quelle est la signification/le but de cette méthode ?

4 votes

4 votes

Pour les développeurs Java qui apprennent Python, la meilleure façon de voir cela est de considérer toString() en Java.

1voto

Ashish Anand Points 1

Lorsque nous créons de nouveaux types en définissant des classes, nous pouvons tirer parti de certaines fonctionnalités de Python pour rendre ces nouvelles classes plus pratiques à utiliser. L'une de ces fonctionnalités est constituée par les "méthodes spéciales", également appelées "méthodes magiques".

Les méthodes spéciales ont des noms qui commencent et se terminent par deux traits de soulignement. Nous les définissons, mais nous ne les appelons généralement pas directement par leur nom. Au lieu de cela, elles s'exécutent automatiquement dans des circonstances spécifiques.

Il est pratique de pouvoir sortir la valeur d'une instance d'un objet en utilisant une instruction print. Dans ce cas, nous souhaitons que la valeur soit représentée dans la sortie sous un format compréhensible et sans ambiguïté. Le site répression Une méthode spéciale peut être utilisée pour faire en sorte que cela se produise. Si nous définissons cette méthode, elle peut être appelée automatiquement lorsque nous imprimons la valeur d'une instance d'une classe pour laquelle nous avons défini cette méthode. Il convient toutefois de préciser qu'il existe également une méthode de type str une méthode spéciale, utilisée dans un but similaire, mais non identique, qui peut avoir la priorité, si nous l'avons également définie.

Si nous n'avons pas défini, le répression pour la classe Point3D, et nous avons instancié mon_point comme une instance de Point3D, puis nous faisons ceci ...

print my_point ... nous pouvons voir ceci comme la sortie ...

Pas très sympa, hein ?

Ainsi, nous définissons le répression o str méthode spéciale, ou les deux, pour obtenir un meilleur rendement.

**class Point3D(object):
    def __init__(self,a,b,c):
        self.x = a
        self.y = b
        self.z = c
    def __repr__(self):
        return "Point3D(%d, %d, %d)" % (self.x, self.y, self.z)
    def __str__(self):
        return "(%d, %d, %d)" % (self.x, self.y, self.z)
my_point = Point3D(1, 2, 3)
print my_point # __repr__ gets called automatically
print my_point # __str__ gets called automatically**

Sortie ...

(1, 2, 3) (1, 2, 3)

-1voto

srav Points 9

Mettre en œuvre répression pour chaque classe que vous implémentez. Il ne devrait y avoir aucune excuse. Implémentez str pour les classes pour lesquelles vous pensez que la lisibilité est plus importante que la non-ambiguïté.

Consultez ce lien : https://www.pythoncentral.io/what-is-the-difference-between- str -et- répression -in-python/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X