Я знаю, что цель метода str()
- вернуть строковое представление объекта, поэтому я хотел проверить, что произойдет, если я заставлю его сделать что-то еще.
Я создал класс и объект:
class MyClass(object):
def __str__(self, a=2, b=3):
return a + b
mc = MyClass()
Когда я звоню:
print(str(mc))
Переводчик жалуется:
TypeError: __str__ returned non-string (type int)
И это вполне понятно, потому что метод str () пытается вернуть int .
Но если я попытаюсь:
print(mc.__str__())
Я получаю вывод: 5.
Так почему интерпретатор позволяет мне возвращать int, когда я вызываю __str__
напрямую, а не когда я использую str (mc), которая - как я понимаю - также оценивается как mc.__str__()
.