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)