Construyendo y sobre las respuestas anteriores y mostrando algunos ejemplos más. Si se usa correctamente, la diferencia entre stry repres clara. En resumen reprdebe devolver una cadena que puede ser distribuido, copiado-pegado a reconstruir el estado exacto del objeto, mientras que stres útil para loggingy observingresultados de depuración. A continuación se muestran algunos ejemplos para ver las diferentes salidas de algunas bibliotecas conocidas.
Fecha y hora
print repr(datetime.now())
print str(datetime.now())
El stres bueno para imprimir en un archivo de registro, donde como reprpuede ser re-utilizados si desea ejecutarlo directamente o descargarla como comandos en un archivo.
x = datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
Numpy
print repr(np.array([1,2,3,4,5]))
print str(np.array([1,2,3,4,5]))
en Numpy el repres nuevamente consumible directamente.
Ejemplo de Vector3 personalizado
class Vector3(object):
def __init__(self, args):
self.x = args[0]
self.y = args[1]
self.z = args[2]
def __str__(self):
return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)
def __repr__(self):
return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)
En este ejemplo, reprdevuelve de nuevo una cadena que se puede consumir / ejecutar directamente, mientras que stres más útil como salida de depuración.
v = Vector3([1,2,3])
print str(v)
print repr(v)
Una cosa a tener en cuenta, si strno está definida repr, strllamará automáticamente repr. Entonces, siempre es bueno al menos definirrepr