07 Июл 2023
2 мин
2264

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

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

Содержание

Часто при работе с объектами в 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__ предназначен для создания «официального» представления, которое может быть использовано для воссоздания объекта.

Содержание

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

Определи профессию по рисунку