сериализовать экземпляры подклассов scipy rv_continuous и rv_discrete - PullRequest
3 голосов
/ 08 февраля 2011

Я использую классы распространения в scipy.stats.distributions и мне нужно сериализовать экземпляры для хранения и передачи. Это довольно сложные объекты, и они не травят. Я пытаюсь разработать класс mixin, который делает объекты доступными для засоления, чтобы я мог работать с ремиксируемыми подклассами, которые в противном случае ведут себя так же, как объекты из scipy.stats. Чем больше я исследую проблему, тем больше я запутываюсь и удивляюсь, упускаю ли я очевидный способ сделать это.

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

У кого-нибудь есть элегантное решение, которым можно поделиться?

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

...