Опираясь на предыдущие ответы и показывая еще несколько примеров. При правильном использовании разница между strи reprочевидна. Короче говоря, reprдолжен возвращать строку, которую можно скопировать и вставить для восстановления точного состояния объекта, тогда как strэто полезно для loggingиobserving отладки результатов. Вот несколько примеров, чтобы увидеть различные результаты для некоторых известных библиотек.
Дата и время
print repr(datetime.now())
print str(datetime.now())
Это strудобно для печати в файл журнала, где reprего можно изменить, если вы хотите запустить его напрямую или выгрузить его в виде команд в файл.
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]))
в Numpy repr это снова напрямую расходный материал.
Пользовательский пример Vector3
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)
В этом примере reprснова возвращает строку, которую можно напрямую использовать / выполнить, тогда как strона более полезна в качестве вывода отладки.
v = Vector3([1,2,3])
print str(v)
print repr(v)
Одна вещь , чтобы иметь в виду, если strне определено , но repr, strбудет автоматически вызывать repr. Так что всегда хорошо хотя бы определитьrepr