Как можно переопределить метод `__str__` в классе?

Для переопределения метода __str__ в классе, необходимо создать метод с именем __str__ в этом классе. Этот метод должен возвращать строковое представление объекта. Пример:

class MyClass:
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return f"Объект MyClass со значением: {self.value}"
  

Метод __str__ в Python используется для представления объекта класса в виде строки. Он вызывается функцией str() и, как правило, должен возвращать удобочитаемое представление объекта, предназначенное для отображения пользователю.

Чтобы переопределить метод __str__ в классе, нужно создать метод с именем __str__ внутри определения класса и реализовать в нем логику, которая будет возвращать желаемое строковое представление объекта.

Вот пример:


class MyClass:
    def __init__(self, name, value):
        self.name = name
        self.value = value

    def __str__(self):
        return f"MyClass object: name={self.name}, value={self.value}"

# Пример использования
obj = MyClass("Example", 42)
print(str(obj))  # Выведет: MyClass object: name=Example, value=42
print(obj)       # Тоже выведет: MyClass object: name=Example, value=42  (так как print неявно использует str())

Важно:

  • Метод __str__ должен возвращать строку. Попытка вернуть что-либо другое приведет к ошибке TypeError.
  • Если метод __str__ не определен в классе, Python использует метод __repr__ для строкового представления объекта. Если и __repr__ не определен, то будет использовано стандартное представление объекта (например, <__main__.MyClass object at 0x7f...>).
  • __str__ предназначен для *человекочитаемого* представления объекта, а __repr__ предназначен для *однозначного* представления (например, для отладки и логирования). В идеале, __repr__ должен возвращать строку, которую можно использовать для создания нового объекта, идентичного исходному (например, MyClass("Example", 42)).
0