2015-02-04 2 views
0

У меня есть класс python, который я могу создать, а затем рассолить. Но тогда у меня есть второй класс, унаследовавший от первого, чьи экземпляры я не могу разгадать. Пикель дает мне ошибку «не может расчехлять экземплярный метод». Оба экземпляра имеют множество методов. Итак, есть ли у кого-нибудь предположение, почему первый класс будет правильно сортировать, но не второй? Я уверен, что вы захотите увидеть код, но он довольно длинный, и я действительно не знаю, какими могут быть «оскорбительные» части второго класса. Поэтому я не могу показать все это, и я действительно не знаю, какими могут быть соответствующие части.Когда маринование не удается рассортировать экземпляр?

+0

https://docs.python.org/2/library/pickle.html#what-can-be-pickled-and-unpickled –

+0

@ Joran Beasley Спасибо, но, честно говоря, если бы я понял этот документ, я бы не пришли сюда. Должен ли я писать методы __dict__ или __getstate__? Если да, то что именно они делают. Еще раз спасибо. –

+0

Комментировать все методы, а затем раскомментировать один за другим и попробовать рассолить его. Делая это, вы можете исключить, какой метод прерывает сериализацию. –

ответ

0

Травление просто не рассолчает ваши классы, маринование работает только на данные, если вы попытаетесь разложить класс со встроенными методами, это просто не сработает. он выйдет из строя и сломан.

Источник: обучение питона Марк Лутц

0

Там довольно обширный список того, что может и не может быть маринованные здесь: https://github.com/uqfoundation/dill/blob/master/dill/_objects.py

В нем перечислены все объекты, через первые 15 или около участков в стандартная библиотека python, и хотя это еще не все, она также охватывает все объекты первичной и многих второстепенных значений в стандартной библиотеке.

Кроме того, если вы решите использовать dill вместо pickle, я собираюсь предположить, что вы, вероятно, не будет иметь вопрос травильного как dill может в значительной степени сериализации ничего питона.

Более непосредственно обращаясь ваш вопрос ... pickle соленья классы по ссылке, в то время как dill маринады классы код или по ссылке, в зависимости от выбранных настроек (по умолчанию это замариновать код). Это может обойти проблемы «поиска» для ссылок на классы, которые имеет pickle.

Смежные вопросы