Время от времени, когда я возвращаюсь к написанию кода 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”