← Все вопросы

Чем отличается __str__ от __repr__?

Задан 11 месяцев назад771 просмотров3 ответа
15

Оба вроде про то, как объект превращается в строку. Когда какой вызывается и что писать в каждом?

3 ответа

26
✓ Принятый ответ — помог автору

__str__ — красивое строковое представление для человека (его зовёт print() и str()). __repr__ — техническое, для разработчика и отладки (его зовёт интерпретатор в консоли, repr() и показ внутри списков).

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y
    def __str__(self):
        return f"({self.x}, {self.y})"
    def __repr__(self):
        return f"Point(x={self.x}, y={self.y})"

p = Point(1, 2)
print(p)        # (1, 2)        -> __str__
p               # Point(x=1, y=2) -> __repr__ (в консоли)
print([p])      # [Point(x=1, y=2)] -> внутри списка тоже __repr__

Правило: если делаешь только один — делай __repr__, потому что при отсутствии __str__ Python падает обратно на __repr__. Наоборот это не работает.

Рустам Закиров вот про "делай repr если один" — золото, спасибо · 11 месяцев назад
9

__str__ для людей, __repr__ для программистов. По хорошему __repr__ должен выглядеть так, будто по нему можно пересоздать объект.

1

Для отладки.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект