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

repr.md

101 строк · 8.4 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.7/library/repr.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 8.19. [`repr`](https://python-all.ru/2.7/library/functions.html#repr) – Альтернативная реализация [`repr()`](https://python-all.ru/2.7/library/functions.html#repr)89> **Примечание**10>11> Модуль [`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.1213**Исходный код:** [Lib/repr.py](https://python-all.ru/src/2.7/Lib/repr.py)1415---1617Модуль [`repr`](https://python-all.ru/2.7/library/functions.html#repr) предоставляет средства для создания представлений объектов с ограничением на длину результирующих строк. Он используется в отладчике Python и может быть полезен и в других контекстах.1819Этот модуль предоставляет класс, экземпляр и функцию:2021#### `class repr.Repr`2223Класс предоставляет средства форматирования для реализации функций, подобных встроенной [repr()](https://python-all.ru/2.7/library/functions.html#func-repr); для разных типов объектов устанавливаются пределы размера, чтобы не допускать генерации слишком длинных представлений.2425#### `repr.aRepr`2627Это экземпляр [`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.2829#### `repr.repr(obj)`3031Это метод [`repr()`](https://python-all.ru/2.7/library/repr.html#repr.Repr.repr) класса `aRepr`. Он возвращает строку, аналогичную возвращаемой встроенной функцией с тем же именем, но с ограничениями на большинство размеров.3233## 8.19.1. Объекты Repr3435Экземпляры [`Repr`](https://python-all.ru/2.7/library/repr.html#repr.Repr) предоставляют несколько атрибутов, которые можно использовать для задания ограничений размера представлений разных типов объектов, а также методы, форматирующие конкретные типы объектов.3637#### `Repr.maxlevel`3839Ограничение глубины при создании рекурсивных представлений. По умолчанию – `6`.4041#### `Repr.maxdict`4243#### `Repr.maxlist`4445#### `Repr.maxtuple`4647#### `Repr.maxset`4849#### `Repr.maxfrozenset`5051#### `Repr.maxdeque`5253#### `Repr.maxarray`5455Ограничения на количество элементов, представленных для указанного типа объекта. По умолчанию – `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` для остальных.5657Новое в версии 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).5859#### `Repr.maxlong`6061Максимальное количество символов в представлении длинного целого числа. Цифры отбрасываются из середины. По умолчанию `40`.6263#### `Repr.maxstring`6465Ограничение на количество символов в строковом представлении строки. Обратите внимание, что в качестве источника символов используется «обычное» строковое представление: если в представлении нужны escape-последовательности, они могут быть искажены при его сокращении. По умолчанию `30`.6667#### `Repr.maxother`6869Этот предел используется для управления размером тех типов объектов, для которых нет специального метода форматирования в объекте [`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`.7071#### `Repr.repr(obj)`7273Эквивалент встроенной [repr()](https://python-all.ru/2.7/library/functions.html#func-repr), использующий форматирование, заданное экземпляром.7475#### `Repr.repr1(obj, level)`7677Рекурсивная реализация, используемая методом [`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* при рекурсивном вызове.7879#### `Repr.repr_TYPE(obj, level)`8081Методы форматирования для конкретных типов реализуются как методы, имена которых основаны на имени типа. В имени метода **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)`.8283## 8.19.2. Наследование объектов Repr8485Использование динамической диспетчеризации в [`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) добавлять поддержку дополнительных встроенных типов объектов или изменять обработку уже поддерживаемых типов. В этом примере показано, как можно добавить специальную поддержку для файловых объектов:8687```python88import repr as reprlib89import sys9091class MyRepr(reprlib.Repr):92    def repr_file(self, obj, level):93        if obj.name in ['<stdin>', '<stdout>', '<stderr>']:94            return obj.name95        else:96            return repr(obj)9798aRepr = MyRepr()99print aRepr.repr(sys.stdin)          # печатает '<stdin>'100```101