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

---

# `importlib.resources.abc` – Абстрактные базовые классы для ресурсов

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

---

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

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

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

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

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

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

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

Устарело с версии 3.12: Используйте [`importlib.resources.abc.TraversableResources`](https://python-all.ru/3.13/library/importlib.resources.abc.html#importlib.resources.abc.TraversableResources).

#### `abstractmethod open_resource(resource)`

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

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

#### `abstractmethod resource_path(resource)`

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

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

#### `abstractmethod is_resource(path)`

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

Изменено в версии 3.10: Аргумент *name* был переименован в *path*.

#### `abstractmethod contents()`

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

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

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

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

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

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

#### `name`

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

#### `abstractmethod iterdir()`

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

#### `abstractmethod is_dir()`

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

#### `abstractmethod is_file()`

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

#### `abstractmethod joinpath(*pathsegments)`

Обходит каталоги в соответствии с *pathsegments* и возвращает результат в виде `Traversable`.

Каждый аргумент *pathsegments* может содержать несколько имён, разделённых прямыми слешами (`/`, `posixpath.sep` ). Например, следующие записи эквивалентны:

```python
files.joinpath('subdir', 'subsuddir', 'file.txt')
files.joinpath('subdir/subsuddir/file.txt')
```

Обратите внимание: некоторые реализации `Traversable` могут не соответствовать последней версии протокола. Для совместимости с такими реализациями передавайте единственный аргумент без разделителей пути в каждый вызов `joinpath`. Например:

```python
files.joinpath('subdir').joinpath('subsubdir').joinpath('file.txt')
```

Изменено в версии 3.11: `joinpath` принимает несколько *pathsegments*, и эти сегменты могут содержать прямые слеши в качестве разделителей пути. Ранее принимался только один аргумент *child*.

#### `abstractmethod __truediv__(child)`

Возвращает дочерний элемент Traversable в self. Эквивалентно `joinpath(child)`.

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

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

При открытии в текстовом режиме принимает параметры кодировки, аналогичные тем, что принимаются [`io.TextIOWrapper`](https://python-all.ru/3.13/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.13/library/importlib.resources.html#importlib.resources.files). Подклассы [`ResourceReader`](https://python-all.ru/3.13/library/importlib.resources.abc.html#importlib.resources.abc.ResourceReader) и предоставляют конкретные реализации абстрактных методов `ResourceReader`. Поэтому любой загрузчик, предоставляющий `TraversableResources`, также предоставляет `ResourceReader`.

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

#### `abstractmethod files()`

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