Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между str и repr
str предназначен для пользователя (end-user) и возвращает удобное, человекочитаемое представление объекта. Вызывается функцией str() и print().
repr предназначен для разработчика и возвращает однозначное, детальное представление для отладки. Вызывается функцией repr() и в интерпретаторе.
Примеры
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}, {self.age} лет"
def __repr__(self):
return f"Person(name='{self.name}', age={self.age})"
person = Person("Иван", 30)
print(person) # Иван, 30 лет
print(repr(person)) # Person(name='Иван', age=30)
Где используются
str вызывается при print() и str():
print(person) # используется __str__
text = str(person) # используется __str__
repr вызывается при repr() и в интерпретаторе:
print(repr(person)) # использует __repr__
person # в интерпретаторе использует __repr__
Списки используют repr
people = [Person("Иван", 30), Person("Мария", 25)]
print(people) # использует __repr__ каждого элемента
F-строки
print(f"Это: {person}") # __str__
print(f"Debug: {person!r}") # __repr__
Правила
- Если str не определен, используется repr
- repr должен помогать разработчику отладить объект
- str должен быть понятен конечному пользователю
- Идеально, если repr позволяет воссоздать объект
Пример с разными представлениями
class Order:
def __init__(self, order_id, status):
self.order_id = order_id
self.status = status
def __str__(self):
return f"Заказ #{self.order_id}: {self.status}"
def __repr__(self):
return f"Order(order_id={self.order_id}, status='{self.status}')"
order = Order(123, "shipped")
print(order) # Заказ #123: shipped
print(repr(order)) # Order(order_id=123, status='shipped')
Итоговое сравнение
| Критерий | str | repr |
|---|---|---|
| Аудитория | Пользователь | Разработчик |
| Назначение | Удобный вывод | Точное представление |
| Вызов | print(), str(), f-строки | repr(), интерпретатор |
| Обязателен | Нет | Рекомендуется |
| Пример | "Заказ #123: shipped" | "Order(order_id=123, status='shipped')" |
Основное правило: всегда определяй repr, а str — только если требуется специальное форматирование для пользователей.