Что ж, этот интерактивный фрагмент консоли Python расскажет все:
>>> class Test:
... def __str__(self):
... return 'asd'
...
>>> t = Test()
>>> print(t)
asd
>>> l = [Test(), Test(), Test()]
>>> print(l)
[__main__.Test instance at 0x00CBC1E8, __main__.Test instance at 0x00CBC260,
__main__.Test instance at 0x00CBC238]
По сути, я хотел бы напечатать три строки asd
при печати списка. Я также пробовал pprint
, но он дает те же результаты.
Предложение в других ответах по реализации __ repr __
, безусловно, является одной из возможностей. Если это невозможно по какой-либо причине (существующий тип, __ repr __
необходим по причинам, не связанным с эстетикой и т. Д.), Тогда просто выполните
print [str(x) for x in l]
или, как некоторые наверняка предложат, map (str, l )
(чуть компактнее).
Вам необходимо создать метод __ repr __
:
>>> class Test:
def __str__(self):
return 'asd'
def __repr__(self):
return 'zxcv'
>>> [Test(), Test()]
[zxcv, zxcv]
>>> print _
[zxcv, zxcv]
Обратитесь к docs :
object .__ repr __ (self)
Вызывается встроенной функцией
repr ()
и преобразованием строк (обратными кавычками) для вычисления «официального» строкового представления объекта. Если это вообще возможно, это должно выглядеть как допустимое выражение Python, которое можно использовать для воссоздания объекта с тем же значением (в соответствующей среде). Если это невозможно, должна быть возвращена строка вида<... некоторое полезное описание ...>
. Возвращаемое значение должно быть строковым объектом. Если класс определяет__ repr __ ()
, но не__ str __ ()
, тогда__ repr __ ()
также используется, когда «неформальное» строковое представление экземпляров этого класса требуется.Обычно это используется для отладки, поэтому важно, чтобы представление было насыщенным и однозначным.