"но означает ли это, что это должен быть просто пример выражения, которое вы можете использовать, или это должно быть действительное выражение, которое может быть выполнено (eval и т. Д.) Для воссоздания объекта? Или ... это должно быть просто изменение фактического выражения, которое использовалось, для чисто информационных целей? "
Ух ты, это много ужимок.
«Примером выражения, которое вы можете использовать» не будет представление определенного объекта. Это не может быть полезным или значимым.
В чем разница между «фактическим выражением, которое может ... воссоздать объект» и «пересмотром фактического выражения, которое использовалось [для создания объекта]»? Оба являются выражением, которое создает объект. Там нет практического различия между ними. Вызов repr может создать либо новое выражение, либо исходное выражение. Во многих случаях они одинаковы.
Обратите внимание, что это не всегда возможно, практично или желательно.
В некоторых случаях вы заметите, что repr () представляет строку, которая явно не является выражением любого вида. Функция repr () по умолчанию для любого определяемого вами класса не используется в качестве выражения.
В некоторых случаях у вас могут быть взаимные (или круговые) ссылки между объектами. Функция repr () этой запутанной иерархии не может иметь смысла.
Во многих случаях объект создается постепенно с помощью синтаксического анализатора. Например, из XML или JSON или что-то. Каким будет репр? Оригинальный XML или JSON? Очевидно, нет, так как они не Python. Это может быть какое-то выражение Python, которое генерирует XML. Однако для гигантского документа XML может оказаться невозможным написать одно выражение Python, которое было бы функциональным эквивалентом синтаксического анализа XML.