Найти тему
Властелин машин

Сериализация кастомного класса

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

В качестве структуры данных для сериализации рассмотрим список пользовательских объектов namedtuple, задающих модели и колонки, к которым они применяются:

Если просто попытаться сохранить объект steps, получите ошибку:

-2

Для создания своей схемы сериализации надо определить, какая информация нужна для однозначного восстановления вашей структуры и сохранить ее по частям. В данном случае нам нужно для каждого элемента списка отдельно сохранить словарь параметров и их значений, а также готовые экземпляры моделей (просто названий мало, так как они могут быть уже обучены). С учетом большого количества файлов, можно сохранить их в папку, а затем заархивировать ее. Данный архив и будет формой хранения состояния нашего объекта:

-3

Для дампа "знакомых" Python объектов используется модуль joblib, а после заархивируем их с модулем zipfile:

-4

Восстановление осуществляется в обратном порядке. Сначала файлы извлекаются из архива в папку:

-5

А затем все с тем же joblib дампы извлекаются в структуры Python:

-6

Вывод объекта steps свидетельствует о том, что сериализация-десериализация прошли корректно:

-7

-8