__repr__ должен возвращать строковое представление объекта, которое, по возможности, является валидным Python выражением, позволяющим воссоздать этот объект.  Предназначен для отладки и логирования.Метод __repr__ в Python возвращает строковое представление объекта, которое должно быть однозначным и, в идеале, пригодным для воссоздания объекта.  Другими словами, если возможно, результатом repr(obj) должен быть Python код, который можно выполнить, чтобы получить объект, равный исходному.
Ключевые моменты:
__repr__ - быть информативным для разработчиков.  Он должен давать хорошее представление о том, что это за объект, его тип и его атрибуты.MyClass(attribute1, attribute2).__str__ не определен, то при вызове str(obj) вместо него будет использован __repr__. То есть __repr__ является запасным вариантом для __str__.Пример:
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __repr__(self):
        return f"Point(x={self.x}, y={self.y})"
p = Point(2, 3)
print(repr(p))  # Вывод: Point(x=2, y=3)
  В этом примере repr(p) возвращает строку "Point(x=2, y=3)", которую можно использовать для воссоздания объекта Point.