__str__ предназначен для конечных пользователей — возвращает понятное человеку строковое представление объекта__repr__ предназначен для разработчиков — возвращает однозначное строковое представление, в идеале такое, которое можно использовать для воссоздания объекта__repr__ должен содержать достаточно информации для восстановления объекта, тогда как __str__ сосредоточен исключительно на читаемости.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"Point({self.x}, {self.y})" # Можно воссоздать объект
def __str__(self):
return f"({self.x}, {self.y})" # Чистый, читаемый вывод
p = Point(3, 4)
print(repr(p)) # Вывод: Point(3, 4)
print(str(p)) # Вывод: (3, 4)
__str__ не определён, Python использует вместо него __repr____repr__ не определён, Python использует стандартное представление вроде <__main__.Point object at 0x...>__str__ — вызывается через print() и str(), подходит для вывода, ориентированного на пользователя__repr__ — используется в интерактивной консоли и через repr(), подходит для отладки и логированияЕсли класс определяет __repr__, но не определяет __str__, то при вызове print() на экземпляре будет использован метод __repr__ как запасной вариант.
Новый — ещё не проверен сообществом
Вы