Как применить функцию __str__ при печати списка объектов в Python - PullRequest
28 голосов
/ 24 августа 2010

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

Ответы [ 3 ]

38 голосов
/ 24 августа 2010

Попробуйте:

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

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

9 голосов
/ 24 августа 2010

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

print [str(x) for x in l]

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

3 голосов
/ 24 августа 2010

Вам нужно сделать __repr__ метод:

>>> class Test:
    def __str__(self):
        return 'asd'
    def __repr__(self):
        return 'zxcv'


>>> [Test(), Test()]
[zxcv, zxcv]
>>> print _
[zxcv, zxcv]

См. документы :

object.__repr__(self)

Вызывается встроенной функцией repr() и преобразованиями строк (обратными кавычками) для вычисления «официального» строкового представления объекта. Если это вообще возможно, это должно выглядеть как допустимое выражение Python, которое можно использовать для воссоздания объекта с тем же значением (с учетом соответствующей среды). Если это невозможно, должна быть возвращена строка вида <...some useful description...>. Возвращаемое значение должно быть строковым объектом. Если класс определяет __repr__(), но не __str__(), тогда __repr__() также используется, когда требуется «неформальное» строковое представление экземпляров этого класса.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...