Построение и предыдущие ответы и еще несколько примеров. При правильном использовании разница между str
и repr
понятна.Короче говоря, repr
должен возвращать строку, которая может быть скопирована для восстановления точного состояния объекта, тогда как str
полезна для результатов отладки logging
и observing
. Вот несколько примеров, чтобы увидеть различные результаты для некоторых известных библиотек.
Datetime
print repr(datetime.now()) #datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
print str(datetime.now()) #2017-12-12 18:49:27.134452
str
хороша для печати в лог-файл, в котором в качестве repr
может быть повторно замыслил, если вы хотите, чтобы запустить его прямо или сбросить его как команды в файл.
x = datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
Numpy
print repr(np.array([1,2,3,4,5])) #array([1, 2, 3, 4, 5])
print str(np.array([1,2,3,4,5])) #[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 __repr__(self):
return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)
def __str__(self):
return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)
В этом примере repr
снова возвращается строка, которая может быть непосредственно потребляться/выполняется, в то время как str
является более полезным в качестве выходных данных отладки.
v = Vector3([1,2,3])
print repr(v) #Vector3([1,2,3])
print str(v) #Vector(x:1, y:2, z:3)
Одна вещь, чтобы иметь в виду, что если str
не определена, но repr
, str
будет автоматически вызывать repr
. Таким образом, это всегда хорошо, по крайней мере, определить repr
http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python – miku
Для тех, кто наступающем от Ruby, ТЛ; ССБ: '' __str__' = to_s 'и' __repr__' = 'проверка'. – Ajedi32