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

---

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

> **Примечание**
>
> Модуль [`repr`](https://python-all.ru/2.7/library/functions.html#repr) был переименован в `reprlib` в Python 3. Инструмент [2to3](https://python-all.ru/2.7/glossary.html#term-2to3) автоматически адаптирует импорты при преобразовании исходных кодов в Python 3.

**Исходный код:** [Lib/repr.py](https://python-all.ru/src/2.7/Lib/repr.py)

---

Модуль [`repr`](https://python-all.ru/2.7/library/functions.html#repr) предоставляет средства для создания представлений объектов с ограничением на длину результирующих строк. Он используется в отладчике Python и может быть полезен и в других контекстах.

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

#### `class repr.Repr`

Класс предоставляет средства форматирования для реализации функций, подобных встроенной [repr()](https://python-all.ru/2.7/library/functions.html#func-repr); для разных типов объектов устанавливаются пределы размера, чтобы не допускать генерации слишком длинных представлений.

#### `repr.aRepr`

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

#### `repr.repr(obj)`

Это метод [`repr()`](https://python-all.ru/2.7/library/repr.html#repr.Repr.repr) класса `aRepr`. Он возвращает строку, аналогичную возвращаемой встроенной функцией с тем же именем, но с ограничениями на большинство размеров.

## 8.19.1. Объекты Repr

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

#### `Repr.maxlevel`

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

#### `Repr.maxdict`

#### `Repr.maxlist`

#### `Repr.maxtuple`

#### `Repr.maxset`

#### `Repr.maxfrozenset`

#### `Repr.maxdeque`

#### `Repr.maxarray`

Ограничения на количество элементов, представленных для указанного типа объекта. По умолчанию – `4` для [`maxdict`](https://python-all.ru/2.7/library/repr.html#repr.Repr.maxdict), `5` для [`maxarray`](https://python-all.ru/2.7/library/repr.html#repr.Repr.maxarray) и `6` для остальных.

Новое в версии 2.4: [`maxset`](https://python-all.ru/2.7/library/repr.html#repr.Repr.maxset), [`maxfrozenset`](https://python-all.ru/2.7/library/repr.html#repr.Repr.maxfrozenset) и [`set`](https://python-all.ru/2.7/library/stdtypes.html#set).

#### `Repr.maxlong`

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

#### `Repr.maxstring`

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

#### `Repr.maxother`

Этот предел используется для управления размером тех типов объектов, для которых нет специального метода форматирования в объекте [`Repr`](https://python-all.ru/2.7/library/repr.html#repr.Repr). Он применяется аналогично [`maxstring`](https://python-all.ru/2.7/library/repr.html#repr.Repr.maxstring). По умолчанию `20`.

#### `Repr.repr(obj)`

Эквивалент встроенной [repr()](https://python-all.ru/2.7/library/functions.html#func-repr), использующий форматирование, заданное экземпляром.

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

Рекурсивная реализация, используемая методом [`repr()`](https://python-all.ru/2.7/library/repr.html#repr.Repr.repr). Она использует тип *obj* для определения того, какой метод форматирования вызвать, передавая ему *obj* и *level*. Методы, специфичные для типа, должны вызывать [`repr1()`](https://python-all.ru/2.7/library/repr.html#repr.Repr.repr1) для выполнения рекурсивного форматирования, передавая `level - 1` в качестве значения *level* при рекурсивном вызове.

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

Методы форматирования для конкретных типов реализуются как методы, имена которых основаны на имени типа. В имени метода **TYPE** заменяется на `string.join(string.split(type(obj).__name__, '_'))`. Диспетчеризация к этим методам обрабатывается [`repr1()`](https://python-all.ru/2.7/library/repr.html#repr.Repr.repr1). Методы, специфичные для типа, которым необходимо рекурсивно форматировать значение, должны вызывать `self.repr1(subobj, level - 1)`.

## 8.19.2. Наследование объектов Repr

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

```python
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)          # печатает '<stdin>'
```
