__repr__ и __str__: когда какой метод использовать?

Давайте на примере рассмотрим разницу в использовании методов __repr__ и __str__.

Результат __str__ должен быть читаемым для человека:

>>> import datetime
>>> today = datetime.date.today()

>>> str(today)
'2021-05-11'

Результат __repr__ должен быть максимально точным:

>>> import datetime
>>> today = datetime.date.today()

>>> repr(today)
'datetime.date(2021, 5, 11)'

Интерпретатор Python использует __repr__:

>>> import datetime
>>> today = datetime.date.today()

>>> today
datetime.date(2021, 5, 11)