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

reprlib.md

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

1> **Источник:** https://python-all.ru/3.1/library/reprlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 8.13. `reprlib` – Альтернативная реализация [`repr()`](https://python-all.ru/3.1/library/functions.html#repr)89Модуль `reprlib` предоставляет средства для создания представлений объектов с ограничениями на размер результирующих строк. Он используется в отладчике Python и может быть полезен в других контекстах.1011Этот модуль предоставляет класс, экземпляр и функцию:1213#### `class reprlib.Repr`1415Класс, предоставляющий средства форматирования, полезные для реализации функций, аналогичных встроенной1617[`repr()`](https://python-all.ru/3.1/library/functions.html#repr)1819; для разных типов объектов добавляются ограничения на размер, чтобы избежать создания слишком длинных представлений.2021#### `reprlib.aRepr`2223Это экземпляр2425[`Repr`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr)2627, который используется для предоставления функции2829[`repr()`](https://python-all.ru/3.1/library/reprlib.html#reprlib.repr)3031, описанной ниже. Изменение атрибутов этого объекта повлияет на ограничения размера, используемые3233[`repr()`](https://python-all.ru/3.1/library/reprlib.html#reprlib.repr)3435и отладчиком Python.3637#### `reprlib.repr(obj)`3839Это метод4041[`repr()`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr.repr)4243объекта4445`aRepr`4647. Он возвращает строку, аналогичную возвращаемой одноимённой встроенной функцией, но с ограничениями на большинство размеров.4849## 8.13.1. Объекты Repr5051Экземпляры [`Repr`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr) предоставляют несколько атрибутов, которые можно использовать для установки ограничений размера представлений различных типов объектов, а также методы, которые форматируют определённые типы объектов.5253#### `Repr.maxlevel`5455Ограничение глубины при создании рекурсивных представлений. По умолчанию –5657`6`5859.6061#### `Repr.maxdict`6263#### `Repr.maxlist`6465#### `Repr.maxtuple`6667#### `Repr.maxset`6869#### `Repr.maxfrozenset`7071#### `Repr.maxdeque`7273#### `Repr.maxarray`7475Ограничения на количество отображаемых элементов для указанного типа объекта. По умолчанию7677`4`7879для8081[`maxdict`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr.maxdict)8283,8485`5`8687для8889[`maxarray`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr.maxarray)9091и9293`6`9495для остальных.9697#### `Repr.maxlong`9899Максимальное количество символов в строковом представлении целого числа. Цифры в середине отбрасываются. По умолчанию100101`40`102103.104105#### `Repr.maxstring`106107Ограничение на количество символов в строковом представлении строки. Обратите внимание, что в качестве источника символов используется «обычное» строковое представление: если в представлении нужны escape-последовательности, они могут быть искажены при его сокращении. По умолчанию108109`30`110111.112113#### `Repr.maxother`114115Этот предел используется для контроля размера типов объектов, для которых в объекте116117[`Repr`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr)118119нет специального метода форматирования. Он применяется аналогично120121[`maxstring`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr.maxstring)122123. По умолчанию –124125`20`126127.128129#### `Repr.repr(obj)`130131Эквивалент встроенной132133[`repr()`](https://python-all.ru/3.1/library/functions.html#repr)134135, использующий форматирование, заданное экземпляром.136137#### `Repr.repr1(obj, level)`138139Рекурсивная реализация, используемая140141[`repr()`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr.repr)142143. Она использует тип144145*obj*146147, чтобы определить, какой метод форматирования вызвать, передавая ему148149*obj*150151и152153*level*154155. Методы для конкретных типов должны вызывать156157[`repr1()`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr.repr1)158159для выполнения рекурсивного форматирования, с160161`level - 1`162163в качестве значения164165*level*166167при рекурсивном вызове.168169#### `Repr.repr_TYPE(obj, level)`170171Методы форматирования для конкретных типов реализованы как методы с именем на основе имени типа. В имени метода172173**TYPE**174175заменяется на176177`string.join(string.split(type(obj).__name__, '_'))`178179. Вызов этих методов обрабатывается методом180181`repr1()`182183. Методы для конкретных типов, которым нужно рекурсивно форматировать значение, должны вызывать184185`self.repr1(subobj, level - 1)`186187.188189## 8.13.2. Создание подклассов Repr190191Использование динамической диспетчеризации через [`Repr.repr1()`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr.repr1) позволяет подклассам [`Repr`](https://python-all.ru/3.1/library/reprlib.html#reprlib.Repr) добавлять поддержку дополнительных встроенных типов объектов или изменять обработку уже поддерживаемых типов. В следующем примере показано, как можно добавить специальную поддержку для файловых объектов:192193```python194import reprlib195import sys196197class MyRepr(reprlib.Repr):198    def repr_file(self, obj, level):199        if obj.name in ['<stdin>', '<stdout>', '<stderr>']:200            return obj.name201        else:202            return repr(obj)203204aRepr = MyRepr()205print(aRepr.repr(sys.stdin))         # печатает '<stdin>'206```207