Ответ 1
Когда вы проверяете объект таким образом в REPL, он вызывает метод __repr__
объекта. Для сравнения, print
использует метод __str__
объекта. Пример:
>>> class Widget:
... def __repr__(self):
... return "repr of a Widget"
... def __str__(self):
... return "str of a Widget"
...
>>> x = Widget()
>>> x
repr of a Widget
>>> print(x)
str of a Widget
>>> print([x,2,3])
[repr of a Widget, 2, 3]
>>> print(repr(x))
repr of a Widget
>>> print(str(x))
str of a Widget
Определяя __repr__
и __str__
для своих собственных классов, постарайтесь следовать рекомендациям по документации, которые должны быть более подробными и "официальными".
[
__repr__
вычисляет] "официальное" строковое представление объекта. Если это вообще возможно, это должно выглядеть как допустимое выражение Python, которое можно использовать для воссоздания объекта с тем же значением (при условии соответствующей среды).
...
[__str__
вычисляет] "неформальное" строковое представление объекта. Возвращаемое значение должно быть строковым объектом. Этот метод отличается отobject.__repr__()
тем, что не__str__()
что__str__()
вернет правильное выражение Python: можно использовать более удобное или краткое представление.