Рассказать о поведении __str__ и __repr__ при выводе объекта через print()

12. Рассказать о поведении __str__ и __repr__ при выводе объекта через print()

Условие задачи Какой результат будет выведен на экран при выполнении данного кода?

class MyClass:
    def __init__(self):
        self.a = "1"
        self.b = "2"

    def __str__(self):
        return self.a

    def __repr__(self):
        return self.b

my_obj = MyClass()
print(my_obj) >>
Спойлеры к решению
Подсказки
  • Метод __str__ используется для человекочитаемого строкового представления объекта.
  • Метод __repr__ используется для технического строкового представления объекта.
  • Функция print() сначала пытается использовать __str__.
  • В этом классе __str__ возвращает self.a.
  • Значение self.a равно "1".
Решение
class MyClass:
    def __init__(self):
        self.a = "1"
        self.b = "2"

    def __str__(self):
        return self.a

    def __repr__(self):
        return self.b


my_obj = MyClass()
print(my_obj)

Результат:

1

При вызове:

print(my_obj)

Python использует метод __str__, потому что print() выводит объект в строковом виде для пользователя.

В данном случае:

def __str__(self):
    return self.a

А self.a содержит строку "1", поэтому на экран будет выведено:

1

Метод __repr__ здесь не используется. Он вернул бы "2", например, при вызове:

repr(my_obj)