repr — Альтернативная реализация repr()
Примечание
Модуль repr был переименован в reprlib в Python 3. Инструмент 2to3 автоматически адаптирует импорты при преобразовании ваших исходных файлов в Python 3.
Исходный код: Lib/repr.py
Модуль repr предоставляет средства для создания представлений объектов с ограничениями на размер результирующих строк. Это используется в отладчике Python и может быть полезным в других контекстах.
Этот модуль предоставляет класс, экземпляр и функцию:
-
class repr.Repr -
Класс, предоставляющий функции форматирования, полезные при реализации функций, аналогичных встроенной функции repr(); ограничения размера для различных типов объектов добавлены для предотвращения генерации чрезмерно длинных представлений.
-
repr.aRepr -
Это экземпляр класса
Repr, который используется для предоставления функцииrepr(), описанной ниже. Изменение атрибутов этого объекта повлияет на ограничения размера, используемые функциейrepr()и отладчиком Python.
-
repr.repr(obj) -
Это метод
repr()объектаaRepr. Он возвращает строку, аналогичную той, что возвращает встроенная функция с тем же именем, но с ограничениями на большинство размеров.
1. Объекты Repr
Repr экземпляры предоставляют несколько атрибутов, которые могут быть использованы для установления ограничений размера представлений различных типов объектов, и методы, которые форматируют конкретные типы объектов.
-
Repr.maxlevel -
Ограничение глубины при создании рекурсивных представлений. По умолчанию
6.
-
Repr.maxdict -
Repr.maxlist -
Repr.maxtuple -
Repr.maxset -
Repr.maxfrozenset -
Repr.maxdeque -
Repr.maxarray -
Ограничения на количество элементов, представленных для указанного типа объекта. По умолчанию
4дляmaxdict,5дляmaxarrayи6для других.Введено в версии 2.4:
maxset,maxfrozensetиset.
-
Repr.maxlong -
Максимальное количество символов в представлении для целого числа большой точности. Цифры из середины отбрасываются. По умолчанию
40.
-
Repr.maxstring -
Ограничение на количество символов в представлении строки. Обратите внимание, что для получения исходного текста используется «обычное» представление строки: если в представлении необходимы последовательности экранирования, они могут быть повреждены при укорачивании представления. По умолчанию
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).
2. Наследование от объектов Repr
Использование динамического диспетчерирования методом Repr.repr1() позволяет подклассам Repr добавлять поддержку дополнительных встроенных типов объектов или изменять обработку уже поддерживаемых типов. Этот пример демонстрирует, как можно добавить специальную поддержку для объектов файлов:
import repr as 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) # prints '<stdin>'
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/repr.html