Я использую классы распространения в scipy.stats.distributions
и мне нужно сериализовать экземпляры для хранения и передачи. Это довольно сложные объекты, и они не травят. Я пытаюсь разработать класс mixin, который делает объекты доступными для засоления, чтобы я мог работать с ремиксируемыми подклассами, которые в противном случае ведут себя так же, как объекты из scipy.stats. Чем больше я исследую проблему, тем больше я запутываюсь и удивляюсь, упускаю ли я очевидный способ сделать это.
Я прочитал связанный с этим вопрос о том, как выбирать методы экземпляра, но это только часть общего решения, которое мне нужно, и может даже не понадобиться. Я экспериментировал с написанием вспомогательных функций pickle, которые точно следуют методу __init__
и сериализуют объект в качестве аргументов __init__
, но это кажется хрупким, особенно когда подклассы могут определять произвольное поведение подкласса в __init__
.
У кого-нибудь есть элегантное решение, которым можно поделиться?
Обновление: Я нашел Отчет об ошибке Python с примером регистрации функций поддержки pickle с помощью модуля copy_reg
для выбора методов экземпляра. В моем случае единственными блокировщиками были атрибуты метода экземпляра. Тем не менее, я все еще хотел бы знать, есть ли способ использовать класс mixin для решения этой проблемы, потому что copy_reg
имеет глобальные эффекты, которые могут быть нежелательны во всех ситуациях.