print
и str
(а также её внутренний эквивалент, который используется функцией print
) сначала пытается использовать метод __str__
. Вообще, этот метод должен возвращать строковое представление в удобном для пользователя виде.Во всех остальных случаях используется метод
__repr__
: функцией автоматического вывода в интерактивной оболочке, функциями print
и str
, когда в классе отсутствует метод __str__
. Вообще этот метод должен возвращать строку, которая могла бы использоваться как программный код для восстановления объекта или содержать информацию, полезную для разработчиков. Проще говоря, метод
__repr__
используется везде, за исключением функций print
и str
, если определен метод __str__
. Однако если метод __str__
отсутствует, операции вывода будут использовать __repr__
, но не наоборот — в остальных случаях, например, функцией автоматического вывода в интерактивной оболочке всегда используется только метод __repr__
; попытка использовать метод __str__
даже не предпринимается:class TestInteractiveOutput(object):
def __init__(self, text):
self.text = text
def __str__(self):
return 'text: {}'.format(self.text)
t_obj = TestInteractiveOutput('hello, world')
t_obj
<__main__.TestInteractiveOutput object at 0x0303B5D0>