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

---

# [`importlib.resources.abc`](https://python-all.ru/3.11/library/importlib.resources.abc.html#module-importlib.resources.abc) – Абстрактные базовые классы для ресурсов

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

---

Новое в версии 3.11.

#### `class importlib.resources.abc.ResourceReader`

*Заменено на TraversableResources*

An [abstract base class](https://python-all.ru/3.11/glossary.html#term-abstract-base-class) to provide the ability to read *resources*.

С точки зрения этого ABC, *ресурс* – это бинарный артефакт, поставляемый внутри пакета. Обычно это что-то вроде файла данных, который находится рядом с `__init__.py` файлом пакета. Назначение этого класса – абстрагировать доступ к таким файлам данных, чтобы не имело значения, хранятся ли пакет и его файлы данных, например, в zip-архиве или в файловой системе.

Для любого из методов этого класса аргумент *resource* должен быть [path-подобным объектом](https://python-all.ru/3.11/glossary.html#term-path-like-object), который по сути представляет собой имя файла. Это означает, что в аргументе *resource* не должно быть путей к подкаталогам. Это связано с тем, что местоположение пакета, для которого предназначен читатель, выступает в роли «каталога». Следовательно, метафора каталогов и имён файлов – это пакеты и ресурсы соответственно. Именно поэтому экземпляры этого класса должны напрямую соответствовать конкретному пакету (а не потенциально представлять несколько пакетов или модуль).

Загрузчики, желающие поддерживать чтение ресурсов, должны предоставить метод с именем `get_resource_reader(fullname)`, который возвращает объект, реализующий интерфейс этого ABC. Если модуль, указанный fullname, не является пакетом, этот метод должен вернуть [`None`](https://python-all.ru/3.11/library/constants.html#None). Объект, совместимый с этим ABC, должен возвращаться только тогда, когда указанный модуль является пакетом.

Добавлено в версии 3.7.

#### `abstractmethod open_resource(resource)`

Возвращает открытый [файлоподобный объект](https://python-all.ru/3.11/glossary.html#term-file-like-object) для бинарного чтения *ресурса*.

Если ресурс не найден, выбрасывается [`FileNotFoundError`](https://python-all.ru/3.11/library/exceptions.html#FileNotFoundError).

#### `abstractmethod resource_path(resource)`

Возвращает путь в файловой системе к *ресурсу*.

Если ресурс не существует на файловой системе в конкретном виде, возбуждается [`FileNotFoundError`](https://python-all.ru/3.11/library/exceptions.html#FileNotFoundError).

#### `abstractmethod is_resource(name)`

Возвращает `True`, если указанный *name* считается ресурсом. [`FileNotFoundError`](https://python-all.ru/3.11/library/exceptions.html#FileNotFoundError) возникает, если *name* не существует.

#### `abstractmethod contents()`

Возвращает [итерируемый объект](https://python-all.ru/3.11/glossary.html#term-iterable) со строками по содержимому пакета. Обратите внимание, что не все имена, возвращаемые итератором, должны быть реальными ресурсами; например, допустимо возвращать имена, для которых [`is_resource()`](https://python-all.ru/3.11/library/importlib.resources.abc.html#importlib.resources.abc.ResourceReader.is_resource) будет ложным.

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

Абстрактный метод возвращает итерируемый объект без элементов.

#### `class importlib.resources.abc.Traversable`

Объект с подмножеством методов [`pathlib.Path`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path), подходящих для обхода каталогов и открытия файлов.

Для представления объекта в файловой системе используйте [`importlib.resources.as_file()`](https://python-all.ru/3.11/library/importlib.resources.html#importlib.resources.as_file).

Новое в версии 3.9.

#### `name`

Абстрактный. Базовое имя этого объекта без каких-либо ссылок на родительские элементы.

#### `abstractmethod iterdir()`

Возвращает объекты Traversable внутри self.

#### `abstractmethod is_dir()`

Возвращает True, если self является каталогом.

#### `abstractmethod is_file()`

Возвращает True, если self является файлом.

#### `abstractmethod joinpath(child)`

Возвращает дочерний элемент Traversable в self.

#### `abstractmethod __truediv__(child)`

Возвращает дочерний элемент Traversable в self.

#### `abstractmethod open(mode='r', *args, **kwargs)`

*mode* может быть 'r' или 'rb' для открытия в текстовом или бинарном режиме. Возвращает дескриптор, подходящий для чтения (то же самое, что [`pathlib.Path.open`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.open)).

При открытии в текстовом режиме принимает параметры кодировки, аналогичные тем, что принимаются [`io.TextIOWrapper`](https://python-all.ru/3.11/library/io.html#io.TextIOWrapper).

#### `read_bytes()`

Читает содержимое self как байты.

#### `read_text(encoding=None)`

Читает содержимое self как текст.

#### `class importlib.resources.abc.TraversableResources`

Абстрактный базовый класс для считывателей ресурсов, способных обслуживать интерфейс [`importlib.resources.files()`](https://python-all.ru/3.11/library/importlib.resources.html#importlib.resources.files). Подклассы [`ResourceReader`](https://python-all.ru/3.11/library/importlib.resources.abc.html#importlib.resources.abc.ResourceReader) и предоставляют конкретные реализации абстрактных методов `ResourceReader`. Поэтому любой загрузчик, предоставляющий `TraversableResources`, также предоставляет `ResourceReader`.

Загрузчики, поддерживающие чтение ресурсов, должны реализовать этот интерфейс.

Новое в версии 3.9.

#### `abstractmethod files()`

Возвращает объект [`importlib.resources.abc.Traversable`](https://python-all.ru/3.11/library/importlib.resources.abc.html#importlib.resources.abc.Traversable) для загруженного пакета.
