Saltar al contenido

¿Cuál es el propósito de __str__ y __repr__?

Solución:

__repr__

Llamado por el repr() función incorporada y por conversiones de cadena (comillas inversas) para calcular la representación de cadena “oficial” de un objeto. Si es posible, esto debería verse como una expresión de Python válida que podría usarse para recrear un objeto con el mismo valor (dado un entorno apropiado).

__str__

Llamado por el str() función incorporada y por la declaración de impresión para calcular la representación de cadena “informal” de un objeto.

Usar __str__ si tiene una clase, y querrá una salida informativa / informal, siempre que use este objeto como parte de una cadena. Por ejemplo, puedes definir __str__ métodos para los modelos de Django, que luego se procesan en la interfaz de administración de Django. En lugar de algo como <Model object> obtendrá como nombre y apellido de una persona, el nombre y la fecha de un evento, etc.


__repr__ y __str__ son similares, de hecho a veces iguales (Ejemplo de BaseSet clase en sets.py de la biblioteca estándar):

def __repr__(self):
    """Return string representation of a set.

    This looks like 'Set([<list of elements>])'.
    """
    return self._repr()

# __str__ is the same as __repr__
__str__ = __repr__

El único lugar donde los usa mucho es en una sesión interactiva. Si imprime un objeto, entonces su __str__ se llamará al método, mientras que si solo usa un objeto por sí mismo, entonces su __repr__ se muestra:

>>> from decimal import Decimal
>>> a = Decimal(1.25)
>>> print(a)
1.25                  <---- this is from __str__
>>> a
Decimal('1.25')       <---- this is from __repr__

los __str__ pretende ser lo más legible posible por humanos, mientras que __repr__ debería apuntar a ser algo que pueda usarse para recrear el objeto, aunque a menudo no será exactamente como fue creado, como en este caso.

Tampoco es inusual para ambos __str__ y __repr__ para devolver el mismo valor (ciertamente para tipos integrados).

Saltamontes, en caso de duda ve a la montaña y lee los Textos Antiguos. En ellos encontrará que __repr __ () debería:

Si es posible, debería verse como una expresión de Python válida que podría usarse para recrear un objeto con el mismo valor.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *