__str__
и __repr__
, то при попытке его строкового представления (например, через str(object)
или print(object)
), будет использована реализация, предоставленная базовым классом object
. Эта реализация обычно возвращает строку, содержащую тип объекта и его адрес в памяти (например, <__main__.MyClass object at 0x...>
).
Если у объекта в Python не переопределен ни метод __str__
, ни метод __repr__
, то при попытке получить строковое представление объекта (например, при использовании функций str()
, print()
или при форматировании строки с использованием %s
или {}
), будет вызван метод __repr__
, унаследованный от базового класса object
.
По умолчанию, метод object.__repr__
возвращает строку вида <__main__.ИмяКласса object at АдресВПамяти>
. __main__
будет заменено именем модуля, где определён класс. ИмяКласса
– это имя класса объекта. АдресВПамяти
– это шестнадцатеричное представление адреса объекта в памяти.
Важно понимать, что в Python __str__
предназначен для получения "дружественного" представления объекта, которое удобно читать пользователю. __repr__
, в свою очередь, предназначен для получения "однозначного" представления объекта, которое полезно для отладки и может быть использовано для воссоздания объекта. Если __str__
не определен, то __repr__
используется в качестве его замены.
В заключение, если ни один из методов не переопределен, вы получите стандартное представление объекта, которое хоть и неинформативно с точки зрения бизнес-логики, но позволяет идентифицировать класс объекта и его местоположение в памяти.