Как использовать __repr__ для удобного представления данных
Когда использовать .__repr__()
против .__str__()
в Python?
од Стивен Группетта, 22 марта 2023 г.
Вкратце: используйте .__repr__()
для программистов и .__str__()
для пользователей
Один из наиболее распространенных задач, выполняемых компьютерной программой, - это отображение данных. Программа часто отображает эту информацию для пользователей программы. Однако программа также должна показывать информацию программисту, разрабатывающему и поддерживающему ее. Информация, которую программисту необходимо о объекте, отличается от того, как программа должна отображать тот же самый объект для пользователя, и в этом случае возникает вопрос о использовании .__repr__()
против .__str__()
.
Объект Python имеет несколько специальных методов, которые предоставляют определенное поведение. Существуют два похожих специальных метода, которые описывают объект с использованием строкового представления. Это методы .__repr__()
и .__str__()
. Метод .__repr__()
возвращает подробное описание для программиста, который должен поддерживать и отлаживать код. Метод .__str__()
возвращает упрощенное описание с информацией для пользователя программы.
Методы .__repr__()
и .__str__()
- это два из специальных методов, которые вы можете определить для любого класса. Они позволяют вам контролировать, как программа отображает объект в нескольких обычных формах вывода, таких как то, что вы получаете из функции print()
, форматированных строк и интерактивных сред.
В этом учебнике вы узнаете, как отличить .__repr__()
от .__str__()
и как использовать эти специальные методы в определенных вами классах. Определение этих методов делает классы, которые вы пишете, более читаемыми и легче отлаживаемыми и поддерживаемыми. Итак, когда следует выбирать .__repr__()
против .__str__
в Python?
Вкратце: используйте .__repr__()
для программистов и .__str__()
для пользователей
Специальные методы .__repr__()
и .__str__()
оба возвращают строковые представления объекта. Строковое представление - это строка, которая показывает информацию о объекте. Вы можете настроить эту информацию для разных аудиторий, таких как пользователи программы или ваши коллеги-программисты.
Как и с другими специальными методами с двойными подчеркиваниями в начале и в конце их имен, вы можете определить эти методы для любого класса.
Причина, по которой существует два метода для отображения объекта, заключается в том, что они имеют разные цели:
.__repr__()
предоставляет официальное строковое представление объекта, предназначенное для программиста..__str__()
предоставляет неформальное строковое представление объекта, предназначенное для пользователя.
Целевая аудитория для строкового представления, возвращаемого .__repr__()
, - это программист, разрабатывающий и поддерживающий программу. В целом, оно предоставляет детальную и однозначную информацию о объекте. Еще одно важное свойство официального строкового представления состоит в том, что программист обычно может использовать его для создания объекта, идентичного оригинальному.
Метод .__str__()
предоставляет строковое представление, нацеленное на пользователей программы, которые не обязательно являются программистами Python. Поэтому это представление позволяет любому пользователю понять и использовать объект, даже если он не имеет знаний о внутренней реализации класса или программе в целом.
Как получить доступ к строковым представлениям объекта?
Вы можете получить доступ к строковым представлениям объекта, используя соответствующие встроенные функции или методы. Вот несколько основных способов получить доступ к строковым представлениям объекта:
Функции str()
и repr()
Стандартные встроенные функции str()
и repr()
используют методы .__str__()
и .__repr__()
соответственно для получения строковых представлений объекта. Вы можете вызывать эти функции, передавая объект в качестве аргумента:
Оператор print()
Оператор print()
использует функцию str()
для получения строки для печати на стандартный вывод. Вы можете передать объект как аргумент оператору print()
:
Форматированные строки
Форматированные строки в Python используют функцию str.format()
для подстановки значений в шаблон строки. При форматировании строки, объекты автоматически преобразуются в строковые представления с помощью метода .__str__()
:
Интерактивные среды
В интерактивных средах, таких как интерпретатор Python или блокнот Jupyter, ввод объекта в командную строку автоматически вызывает метод .__repr__()
для отображения строкового представления объекта.
Должны ли вы определить .__repr__()
и .__str__()
в пользовательском классе?
В большинстве случаев имеет смысл определить и .__repr__()
и .__str__()
для пользовательского класса. По умолчанию, если вы не определите эти методы, Python будет использовать стандартные реализации, которые возвращают строки вида <__main__.MyClass object at 0x00000123456>
для .__repr__()
и <__main__.MyClass object>
для .__str__()
.
Определение собственных методов .__repr__()
и .__str__()
позволяет вам контролировать вывод вашего объекта и предоставить более информативные и понятные строки для программистов и пользователей программы.
Заключение
В этом учебнике вы узнали о различиях между .__repr__()
и .__str__()
в Python, а также о том, как использовать эти методы для улучшения понятности и читаемости ваших классов. Теперь вы знаете, что использовать .__repr__()
для программистов и .__str__()
для пользователей, чтобы обеспечить наилучшую информативность и удобство использования ваших объектов.
Get Python Tricks »
Теперь, когда вы ознакомились с различием между .__repr__()
и .__str__()
вы можете более осознанно использовать эти методы в ваших программах Python. Определение правильных строковых представлений для ваших классов поможет сделать ваш код более читаемым и понятным для ваших коллег-программистов и пользователей программы.