Вы наверняка видели это в консоли:
<__main__.Point object at 0x10f3a2c50>.Это стандартный ответ Python, который абсолютно бесполезен и для пользователя, и для разработчика при отладке.
Но в Python есть два метода, которые превращают этот «мусор» в понятные данные.
🔹
__str__() — Для людейЭтот метод вызывается функциями
print() и str(). Его цель — выдать максимально чистое, красивое и читаемое описание объекта. 🔹
__repr__() — Для разработчиковЭтот метод вызывается в REPL-консоли, отладчиках и внутри коллекций (например, когда вы печатаете список объектов). Его цель — однозначность.
Идеальный
__repr__ должен выглядеть как код, который можно скопировать и вставить, чтобы воссоздать этот же объект.Золотое правило реализации:
1. Всегда реализуйте
__repr__()**. Если вы не определили __str__, Python автоматически использует __repr__ как запасной вариант.2. Добавляйте
__str__() только тогда, когда вам нужно «причесать» вывод для конечного пользователя.Реальный пример (Data Model):
class Product:
def __init__(self, name, price):
self.name = name
self.price = price
def __repr__(self):
# Однозначно: имя класса и параметры
return f"Product(name='{self.name}', price={self.price})"
def __str__(self):
# Красиво: только для пользователя
return f"{self.name} — всего за {self.price}₽"
p = Product("Кофе", 250)
print(p) # Вывод: Кофе — всего за 250₽
print(repr(p)) # Вывод: Product(name='Кофе', price=250)
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
