Стандартный модуль pprint
удобен при работе со списками, словарями и т.д. Но иногда совершенно непригодно для использования с пользовательскими классами:
Единственный способ заставить его печатать пригодную для использования информацию об объекте некоторого класса — это переопределить
__repr__
, но что, если в моем классе уже есть хороший,eval()
'способный__repr__
, который не показывает информацию, которую я хочу видеть в выводе pprint?Хорошо, я напишу ориентированный на печать
__repr__
, но в этом случае невозможно красиво напечатать что-то внутри моего класса:
.
class Data:
def __init__(self):
self.d = {...}
Я не могу красиво напечатать содержимое self.d
, я могу вернуть только однострочное представление (по крайней мере, не играя с трассировкой стека и т. д.). - Переопределение PrettyPrinter
не вариант, я не хочу делать это каждый раз, когда хочу красиво напечатать один и тот же класс.
Итак... Существуют ли какие-либо альтернативы pprint, которые позволяют сделать пользовательский класс красивым для печати?
"array([(0, 0, (0, 0, 0)), (0, 0, (0, 0, 0)), (0, 0, (0, 0, 0)),\n (0, 0, (0, 0, 0))], \n dtype=[('foo', 'u1'), ('bar', '<u2'), ('baz', [('fbb', 'u1'), ('oaa', 'u1'), ('orz', 'u1')])])"
. Это нормально с eval(), с "массивом" в пространстве имен. - person kampu   schedule 19.05.2013pprint
. - person Equidamoid   schedule 19.05.2013PrettyPrinter
не вариант? - person utapyngo   schedule 19.05.2013__repr__
? Строка, которую он возвращает, может содержать представление любого поля вашего объекта. - person utapyngo   schedule 19.05.2013PrettyPrinter
(потому что кода, специфичного для класса, там не должно быть), и ищу универсальное решение, такое как один упомянутый в моем 1-м комментарии. - person Equidamoid   schedule 19.05.2013__repr__
из-за неизвестного текущего уровня отступа. - person Equidamoid   schedule 20.05.2013