← Все вопросы
Чем отличается __str__ от __repr__?
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
Для отладки.
Ваш ответ
Войдите, чтобы ответить на вопрос.