Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
20 Апр 2023
3 мин
3595

Разница между __str__ и __repr__ в Python

Часто при работе с объектами в Python возникает потребность в представлении объектов в виде строк. Это может быть полезно для отладки, логирования или

Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.

Часто при работе с объектами в Python возникает потребность в представлении объектов в виде строк. Это может быть полезно для отладки, логирования или просто для вывода информации о объекте. В Python для этого существуют два специальных метода: __str__ и __repr__.

Предположим, что есть класс Cat, который имеет атрибуты name и age. Можно было бы представить объект этого класса в виде строки следующим образом:

class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f'Cat(name={self.name}, age={self.age})'

Тогда при попытке преобразовать объект класса Cat в строку, будет получено представление объекта в виде Cat(name=Fluffy, age=5).

Однако, что если нужно получить более детальное или иное представление объекта, которое будет удобно использовать для отладки или логирования? Здесь на помощь приходит метод __repr__.

Метод __repr__ предназначен для создания «официального» строкового представления объекта, которое может быть использовано для воссоздания объекта при помощи функции eval(). Вернувшись к нашему примеру с классом Cat, можно добавить метод __repr__ следующим образом:

class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f'Cat(name={self.name}, age={self.age})'

    def __repr__(self):
        return f'Cat(name={self.name!r}, age={self.age!r})'

Теперь при вызове repr() для объекта класса Cat, будет получено представление объекта в виде Cat(name='Fluffy', age=5), которое может быть использовано для воссоздания объекта.

Важно отметить, что если для класса определен только метод __repr__, то он будет использован и при вызове str(). Однако, если определены оба метода, __str__ и __repr__, то при вызове str() будет использован __str__, а при вызове repr()__repr__.

Итак, главное отличие между __str__ и __repr__ в Python заключается в их назначении: __str__ предназначен для создания «приятного» для чтения представления объекта, в то время как __repr__ предназначен для создания «официального» представления, которое может быть использовано для воссоздания объекта.

Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами в разработке для ответов на вопросы и разбора домашек.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий