Как подать заявку Функция __str__ при печати списка объектов в Python

Что ж, этот интерактивный фрагмент консоли 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 , но он дает те же результаты.

30
задан vaultah 13 November 2017 в 20:58
поделиться

3 ответа

Попробуйте:

class Test:
   def __repr__(self):
       return 'asd'

И прочитайте эту ссылку на документацию:

41
ответ дан 27 November 2019 в 23:54
поделиться

Предложение в других ответах по реализации __ repr __ , безусловно, является одной из возможностей. Если это невозможно по какой-либо причине (существующий тип, __ repr __ необходим по причинам, не связанным с эстетикой и т. Д.), Тогда просто выполните

print [str(x) for x in l]

или, как некоторые наверняка предложат, map (str, l ) (чуть компактнее).

9
ответ дан 27 November 2019 в 23:54
поделиться

Вам необходимо создать метод __ 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 __ () также используется, когда «неформальное» строковое представление экземпляров этого класса требуется.

Обычно это используется для отладки, поэтому важно, чтобы представление было насыщенным и однозначным.

3
ответ дан 27 November 2019 в 23:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: