Как использовать `__str__` для настройки форматирования вывода объекта?

Метод __str__ позволяет определить, как объект будет представлен в виде строки при использовании функций str() или print(). Определите этот метод в вашем классе и верните строку желаемого формата.

Пример:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return f"Точка: ({self.x}, {self.y})"

p = Point(1, 2)
print(p)  # Вывод: Точка: (1, 2)
  

Метод `__str__` в Python - это специальный метод, известный также как "магический" или "дандер" метод (от "double underscore"). Он используется для определения строкового представления объекта. Когда вы вызываете функции `print()` или `str()` для вашего объекта, Python автоматически вызывает метод `__str__` этого объекта (если он определен) и использует возвращенное значение для отображения.

Основная цель `__str__` - предоставить удобное, читаемое представление объекта для людей. В отличие от `__repr__`, которое должно предоставлять однозначное представление объекта для отладки (потенциально такое, из которого можно восстановить объект), `__str__` ориентирован на пользователя.

Как использовать `__str__` для настройки форматирования вывода:

  1. Определите метод `__str__` в вашем классе: Внутри класса, для которого вы хотите настроить вывод, определите метод с именем `__str__`. Этот метод должен принимать `self` в качестве аргумента (ссылка на экземпляр объекта).
  2. Верните строку: Метод `__str__` должен возвращать строку, которая представляет ваш объект в желаемом формате. Используйте форматирование строк (например, f-строки, `format()`, или конкатенацию) для построения этой строки.

Пример:


class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages

    def __str__(self):
        return f'Книга "{self.title}" автора {self.author}, {self.pages} страниц'


book = Book("1984", "Джордж Оруэлл", 328)
print(book)  # Вывод: Книга "1984" автора Джордж Оруэлл, 328 страниц
str(book) # Вернет строку 'Книга "1984" автора Джордж Оруэлл, 328 страниц'

Разбор примера:

  • Мы создали класс `Book` с атрибутами `title`, `author` и `pages`.
  • Мы определили метод `__str__` внутри класса `Book`.
  • Внутри `__str__`, мы использовали f-строку для создания отформатированной строки, которая включает значения атрибутов объекта.
  • Когда мы вызываем `print(book)`, Python вызывает `book.__str__()`, и возвращенная строка выводится на консоль.

Важные моменты:

  • Если метод `__str__` не определен, Python будет использовать метод `__repr__` (если он определен) для получения строкового представления объекта. Если и `__str__`, и `__repr__` не определены, Python использует представление по умолчанию (например, `<__main__.MyClass object at 0x...>`).
  • Метод `__str__` должен всегда возвращать строку. Не возвращайте числа, списки и т.д. Преобразуйте их в строку перед возвратом.
  • `__str__` предназначен для представления объекта в удобном для чтения формате. Для отладки и других целей, связанных с однозначным представлением, используйте `__repr__`.

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

0