Мне нужна какая-то обработка объектов, которые травятся непосредственно перед тем, как это произойдет.Точнее для экземпляров подклассов определенного базового класса, я хотел бы, чтобы вместо загрузки было что-то совершенно другое, а затем воссоздано при загрузке.
Мне известно о __getstate__
& __setstate__
, однако это оченьинвазивный подход.Насколько я понимаю, это частные методы (начинаются с двойного подчеркивания: __
) и как таковые могут быть искажены.Следовательно, это фактически заставило бы меня переопределить эти два метода для каждого отдельного класса, к которому я хочу применить это нестандартное поведение.Кроме того, я не имею полного контроля над иерархией всех классов.
Мне было интересно, есть ли какой-то краткий способ подключиться к процессу засолки и применить такой контроль, который __getstate__
и __setstate__
дают, но без необходимости изменять маринованные классы как таковые.
Примечание для любопытных.Этот пример использования взят из проекта с использованием Django и Celery.Модели Django либо непроницаемы, либо очень непрактичны и громоздки для маринования.Поэтому гораздо полезнее вместо этого выбирать пары значений ID + класс модели.Однако иногда травится не модель, а словарь моделей, список моделей, список списков моделей, вы называете это.Это заставляет меня писать много кода для копирования и вставки, который мне действительно не нравится.Необходимость выбора моделей возникает сама по себе из установки Django-сельдерея, где функции вместе с аргументами вызова запланированы для последующего выполнения.К сожалению, среди этих аргументов обычно есть много моделей, смешанных в некоторой нетривиальной иерархии.
РЕДАКТИРОВАТЬ
У меня есть возможность указать используемый сериализатор, который будет использоватьсяCelery, так что на самом деле вопрос заключается в том, чтобы без особых усилий построить слегка модифицированный сериализатор на вершине рассола.