Рубрики
Без рубрики

__str__ против __repr__

Как легко запомнить разницу между функциями __str__ и __repr__ в Python?. Tagged с Python.

Время от времени, когда я возвращаюсь к написанию кода Python после перерыва, на ум приходит вопрос:

Какое сообщение я должен положить в функции __str__ и __repr__?

Когда вы ищете разницу между ними, вы узнаете, что __str__ должно быть человек читаемый и __repr__ должен быть однозначный (Как объяснено в этом вопросе Stackoverflow ). Это отличный, подробный ответ. Но по какой -то причине это никогда не застряло со мной. Я не самый умный разработчик, и иногда, чтобы вспомнить что -то, мне нужен очень простой пример. То, что я на самом деле нашел полезным, было написано прямо в Документация repr () Функция:

Для многих типов эта функция предпринимает попытку вернуть строку, которая даст объект с тем же значением при передаче to eval ()

Отличный пример того, что это значит, это DateTime модуль:

>>> import datetime
>>> now = datetime.datetime.now()
>>> str(now)
'2019-01-21 19:26:40.820153'
>>> repr(now)
'datetime.datetime(2019, 1, 21, 19, 26, 40, 820153)'

Как видите, repr Функция возвращает строку, которую можно использовать для создания объекта с Те же свойства как Теперь (не то же самое как в настоящее время , но с Те же свойства ) Вы можете проверить это с помощью следующего кода:

>>> timestamp = datetime.datetime(2019, 1, 21, 19, 26, 40, 820153)
>>> now == timestamp
True
# But!
>>> id(now) == id(timestamp)
False

Итак, как вы можете использовать его в собственных занятиях? Например, если вы пишете класс Автомобиль у этого есть атрибуты цвет и бренд и инициализируется следующим образом:

red_volvo = Car(brand='volvo', color='red')

Тогда это то, что __repr__ Функция для автомобиля должна вернуться:

>>> repr(red_volvo)
"Car(brand='volvo', color='red')"

Не всегда возможно написать __repr__ функция, которая может воссоздать заданный объект, но просто учитывать эти примеры с DateTime и Автомобиль помог мне вспомнить разницу между __repr__ и __str__ Анкет

Кредиты: я узнал об этом трюке в « Python Tricks “Книга, Дэн Бадер. Если вы не слышали об этом, это отличный источник знаний о промежуточном уровне о Python. Я никоим образом не связан с Дэном, но его книга была одним из самых приятных технических чтений Python, которые у меня были за долгое время.

Больше кредитов: изображение из Pexels

Оригинал: “https://dev.to/switowski/str-vs-repr-gpj”