> **Источник:** https://python-all.ru/3.0/library/reprlib.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `reprlib` – альтернативная реализация [`repr()`](https://python-all.ru/3.0/library/functions.html#repr)

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

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

#### `[reprlib.Repr]class reprlib.Repr`

Класс, предоставляющий средства форматирования, полезные для реализации функций, аналогичных встроенной

[`repr()`](https://python-all.ru/3.0/library/functions.html#repr)

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

#### `[reprlib.aRepr]reprlib.aRepr`

Это экземпляр

[`Repr`](https://python-all.ru/3.0/library/reprlib.html#reprlib.Repr)

, который используется для реализации функции

[`repr()`](https://python-all.ru/3.0/library/functions.html#repr)

, описанной ниже. Изменение атрибутов этого объекта повлияет на ограничения размера, используемые

[`repr()`](https://python-all.ru/3.0/library/functions.html#repr)

и отладчиком Python.

#### `[reprlib.repr]reprlib.repr(obj)`

Это метод

[`repr()`](https://python-all.ru/3.0/library/functions.html#repr)

объекта

`aRepr`

. Он возвращает строку, похожую на ту, что возвращает встроенная функция с тем же именем, но с ограничениями на большинство размеров.

## Объекты Repr

Экземпляры [`Repr`](https://python-all.ru/3.0/library/reprlib.html#reprlib.Repr) предоставляют несколько атрибутов, которые можно использовать для установки ограничений размера представлений различных типов объектов, а также методы, которые форматируют определённые типы объектов.

#### `[reprlib.Repr.maxlevel]Repr.maxlevel`

Ограничение глубины при создании рекурсивных представлений. По умолчанию –

`6`

.

#### `[reprlib.Repr.maxdict]Repr.maxdict`

#### `Repr.maxlist`

#### `Repr.maxtuple`

#### `Repr.maxset`

#### `Repr.maxfrozenset`

#### `Repr.maxdeque`

#### `Repr.maxarray`

Ограничения на количество отображаемых элементов для указанного типа объекта. По умолчанию

`4`

для

[`maxdict`](https://python-all.ru/3.0/library/reprlib.html#reprlib.Repr.maxdict)

,

`5`

для

[`maxarray`](https://python-all.ru/3.0/library/reprlib.html#reprlib.Repr.maxarray)

и

`6`

для остальных.

#### `[reprlib.Repr.maxlong]Repr.maxlong`

Максимальное количество символов в строковом представлении целого числа. Цифры в середине отбрасываются. По умолчанию

`40`

.

#### `[reprlib.Repr.maxstring]Repr.maxstring`

Ограничение на количество символов в строковом представлении строки. Обратите внимание, что в качестве источника символов используется «обычное» строковое представление: если в представлении нужны escape-последовательности, они могут быть искажены при его сокращении. По умолчанию

`30`

.

#### `[reprlib.Repr.maxother]Repr.maxother`

Этот предел используется для контроля размера типов объектов, для которых в объекте

[`Repr`](https://python-all.ru/3.0/library/reprlib.html#reprlib.Repr)

нет специального метода форматирования. Он применяется аналогично

[`maxstring`](https://python-all.ru/3.0/library/reprlib.html#reprlib.Repr.maxstring)

. По умолчанию –

`20`

.

#### `[reprlib.Repr.repr]Repr.repr(obj)`

Эквивалент встроенной

[`repr()`](https://python-all.ru/3.0/library/functions.html#repr)

, использующий форматирование, заданное экземпляром.

#### `[reprlib.Repr.repr1]Repr.repr1(obj, level)`

Рекурсивная реализация, используемая

[`repr()`](https://python-all.ru/3.0/library/functions.html#repr)

. Она использует тип

*obj*

, чтобы определить, какой метод форматирования вызвать, передавая ему

*obj*

и

*level*

. Методы для конкретных типов должны вызывать

[`repr1()`](https://python-all.ru/3.0/library/reprlib.html#reprlib.Repr.repr1)

для выполнения рекурсивного форматирования, с

`level - 1`

в качестве значения

*level*

при рекурсивном вызове.

#### `Repr.repr_TYPE(obj, level)`

Методы форматирования для конкретных типов реализованы как методы, имя которых основано на имени типа. В имени метода

**TYPE**

заменяется на

`string.join(string.split(type(obj).__name__, '_'))`

. Вызов этих методов обрабатывается

[`repr1()`](https://python-all.ru/3.0/library/reprlib.html#reprlib.Repr.repr1)

. Типозависимые методы, которым нужно рекурсивно отформатировать значение, должны вызывать

`self.repr1(subobj, level - 1)`

.

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

Использование динамической диспетчеризации через [`Repr.repr1()`](https://python-all.ru/3.0/library/reprlib.html#reprlib.Repr.repr1) позволяет подклассам [`Repr`](https://python-all.ru/3.0/library/reprlib.html#reprlib.Repr) добавлять поддержку дополнительных встроенных типов объектов или изменять обработку уже поддерживаемых типов. В следующем примере показано, как можно добавить специальную поддержку для файловых объектов:

```python
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>'
```
