как сохранить / прочитать класс полностью в Python - PullRequest
9 голосов
/ 27 февраля 2010
som = SOM_CLASS() # includes many big difficult data structures
som.hard_work()
som.save_to_disk(filename)
#then later or another program
som = SOM_CLASS()
som.read_from_file(filename)
som.do_anythink_else()

или

som = SOM_CLASS()
save(som)
#...
load(som)
som.work()

Какой самый простой способ сделать это?

Ответы [ 3 ]

14 голосов
/ 27 февраля 2010

Вы можете (де) сериализовать с pickle .Он обратно совместим, то есть он будет поддерживать все старые протоколы в будущих версиях.

import pickle

som = SOM_CLASS()
fileObject = <any file-like object>
pickle.dump(som, fileObject)
#...
som = pickle.load(fileObject)
som.work()

Но имейте в виду, что если вы переносите засоленные объекты на другой компьютер, убедитесь, что соединение не может быть подделано как Pickle может быть небезопасным (эту статью должен знать каждый пользователь Pickle).

Другой альтернативой является более старый модуль Marshal .

3 голосов
/ 27 февраля 2010

Взгляните на библиотеку Python pickle.

2 голосов
/ 09 февраля 2012

Я использую этот код:

import cPickle
import traceback

class someClass():
    def __init__(self):
        #set name from variable name. http://stackoverflow.com/questions/1690400/getting-an-instance-name-inside-class-init
        (filename,line_number,function_name,text)=traceback.extract_stack()[-2]
        def_name = text[:text.find('=')].strip()
        self.name = def_name

        try:
            self.load()
        except:
            ##############
            #to demonstrate
            self.someAttribute = 'bla'
            self.someAttribute2 = ['more']
            ##############

            self.save()

    def save(self):
        """save class as self.name.txt"""
        file = open(self.name+'.txt','w')
        file.write(cPickle.dumps(self.__dict__))
        file.close()

    def load(self):
        """try load self.name.txt"""
        file = open(self.name+'.txt','r')
        dataPickle = file.read()
        file.close()

        self.__dict__ = cPickle.loads(dataPickle)

Этот код сохраняет и загружает класс из его фактического имени экземпляра класса. Код из моего блога http://www.schurpf.com/python-save-a-class/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...