Я хочу, чтобы мой класс реализовал, Сохраняют и функции Загрузки, которые просто делают рассол класса. Но по-видимому Вы не можете использовать 'сам' способом ниже. Как можно сделать это?
self = cPickle.load(f)
cPickle.dump(self,f,2)
Вот что я в итоге сделал. Обновление __dict__
означает, что мы сохраняем все новые переменные-члены, которые я добавляю в класс, и просто обновляем те, которые были там, когда объект был последний раз pickle'd. Это кажется наиболее простым при сохранении кода сохранения и загрузки внутри самого класса, так что вызывающий код просто выполняет object.save().
def load(self):
f = open(self.filename, 'rb')
tmp_dict = cPickle.load(f)
f.close()
self.__dict__.update(tmp_dict)
def save(self):
f = open(self.filename, 'wb')
cPickle.dump(self.__dict__, f, 2)
f.close()
Здесь, в документации , есть пример того, как мариновать экземпляр . (Найдите пример "TextReader"). Идея состоит в том, чтобы определить методы __ getstate __
и __ setstate __
, которые позволят вам определить, какие данные необходимо обработать, и как использовать эти данные для повторного создания экземпляра объекта.
Часть дампа должна работать, как вы предложили. для части загрузки вы можете определить @classmethod , который загружает экземпляр из заданного файла и возвращает его.
@classmethod
def loader(cls,f):
return cPickle.load(f)
, тогда вызывающий должен сделать что-то вроде:
class_instance = ClassName.loader(f)
Как насчет написания класса под названием Serializable, который будет реализовывать дамп и загрузку и унаследовать ваш класс от него?