Делаем раз:
class Foo(object):
__slots__ = ['foo']
Делаем два:import pickle
pickle.dumps(Foo()) # низя
И получаем ошибку: TypeError: a class that defines __slots__ without defining __getstate__ cannot be pickled.Оказывается, всё до неприличия просто. По умолчанию, при сериализации, используется старинный протокол (номер ноль,
pickle.dumps(Foo(), 0)
), и вот он как раз и не может разрулить наши __slots__. В данной ситуации стоит использовать более продвинутый протокол (сейчас это номер 2, более старым версиям такой объект не по зубам):import pickle
pickle.dumps(Foo(), -1) # годится
pickle.dumps(Foo(), 2) # тоже
p.s. Пытался сериализовать объекты Genshi.
1 комментарий:
Спасибо. Пригодилось.
Отправить комментарий