Документация Python неофициальный перевод
Содержание страницы

reprlib – альтернативная реализация repr()reprlib – Alternate repr() implementation

Модуль reprlib предоставляет средства для создания представлений объектов с ограничениями на размер результирующих строк. Он используется в отладчике Python и может быть полезен в других контекстах.

Этот модуль предоставляет класс, экземпляр и функцию:

class reprlib.Repr
Класс, предоставляющий средства форматирования, полезные для реализации функций, аналогичных встроенной repr(); для разных типов объектов добавляются ограничения на размер, чтобы избежать создания слишком длинных представлений.
reprlib.aRepr
Это экземпляр Repr, который используется для реализации функции repr(), описанной ниже. Изменение атрибутов этого объекта повлияет на ограничения размера, используемые repr() и отладчиком Python.
reprlib.repr(obj)
Это метод repr() объекта aRepr. Он возвращает строку, похожую на ту, что возвращает встроенная функция с тем же именем, но с ограничениями на большинство размеров.

Объекты ReprRepr Objects

Экземпляры Repr предоставляют несколько атрибутов, которые можно использовать для установки ограничений размера представлений различных типов объектов, а также методы, которые форматируют определённые типы объектов.

Repr.maxlevel
Ограничение глубины при создании рекурсивных представлений. По умолчанию – 6.
Repr.maxdict
Repr.maxlist
Repr.maxtuple
Repr.maxset
Repr.maxfrozenset
Repr.maxdeque
Repr.maxarray
Ограничения на количество отображаемых элементов для указанного типа объекта. По умолчанию 4 для maxdict, 5 для maxarray и 6 для остальных.
Repr.maxlong
Максимальное количество символов в строковом представлении целого числа. Цифры в середине отбрасываются. По умолчанию 40.
Repr.maxstring
Ограничение на количество символов в строковом представлении строки. Обратите внимание, что в качестве источника символов используется «обычное» строковое представление: если в представлении нужны escape-последовательности, они могут быть искажены при его сокращении. По умолчанию 30.
Repr.maxother
Этот предел используется для контроля размера типов объектов, для которых в объекте Repr нет специального метода форматирования. Он применяется аналогично maxstring. По умолчанию – 20.
Repr.repr(obj)
Эквивалент встроенной repr(), использующий форматирование, заданное экземпляром.
Repr.repr1(obj, level)
Рекурсивная реализация, используемая repr(). Она использует тип obj, чтобы определить, какой метод форматирования вызвать, передавая ему obj и level. Методы для конкретных типов должны вызывать repr1() для выполнения рекурсивного форматирования, с level - 1 в качестве значения level при рекурсивном вызове.
Repr.repr_TYPE(obj, level)
Методы форматирования для конкретных типов реализованы как методы, имя которых основано на имени типа. В имени метода TYPE заменяется на string.join(string.split(type(obj).__name__, '_')). Вызов этих методов обрабатывается repr1(). Типозависимые методы, которым нужно рекурсивно отформатировать значение, должны вызывать self.repr1(subobj, level - 1).

Создание подклассов объектов ReprSubclassing Repr Objects

Использование динамической диспетчеризации через Repr.repr1() позволяет подклассам Repr добавлять поддержку дополнительных встроенных типов объектов или изменять обработку уже поддерживаемых типов. В следующем примере показано, как можно добавить специальную поддержку для файловых объектов:

import reprlib
import sys

class MyRepr(reprlib.Repr):
    def repr_file(self, obj, level):
        if obj.name in ['<stdin>', '<stdout>', '<stderr>']:
            return obj.name
        else:
            return repr(obj)

aRepr = MyRepr()
print aRepr.repr(sys.stdin)          # печатает '<stdin>'