Я знаю, что цель метода 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__()
.