Python中是否有类似NSCoding的功能?

Python中是否有类似NSCoding的功能?,python,nscoding,object-persistence,Python,Nscoding,Object Persistence,作为一名iOS开发人员,我最近正在试用Python,我很想知道是否有类似于NSCoding的东西可以让我实现一个方法或一对方法来定义如何将对象自动保存到磁盘,就像NSCoding 我已经找到了,但我不确定它是否是一个更大框架的一部分,我不想把它纳入我的(小)项目中 有Python附带的东西吗?任何流行的以原始但强大的方式处理对象持久性的方法?pickle模块用于序列化对象 您通常可以按原样使用它,但如果需要定义对象应如何序列化,则可以重写特殊方法,\uuu getstate\uuuuu和\uu

作为一名iOS开发人员,我最近正在试用Python,我很想知道是否有类似于
NSCoding
的东西可以让我实现一个方法或一对方法来定义如何将对象自动保存到磁盘,就像
NSCoding

我已经找到了,但我不确定它是否是一个更大框架的一部分,我不想把它纳入我的(小)项目中


有Python附带的东西吗?任何流行的以原始但强大的方式处理对象持久性的方法?

pickle模块用于序列化对象

您通常可以按原样使用它,但如果需要定义对象应如何序列化,则可以重写特殊方法,
\uuu getstate\uuuuu
\uu setstate\uuuu

import cPickle as pickle # faster implementation

path = 'test.dat'
obj = ('Hello, world!', 123, {'x': 0})

# save to disk
with open(path, 'wb') as fp:
    pickle.dump(obj, fp)

# load from disk
with open(path, 'rb') as fp:
    obj = pickle.load(fp)

print obj

对于
\uuuu getstate\uuuu
\uuu setstate\uuuu
实现,这里有一些注意事项:

  • 您实际上不需要实现这些,默认情况下所有对象都是可pickle的。因此,除非对象包含文件、套接字、数据库连接等内容,否则它们是可pickle的
  • 基本上,
    \uuu getstate\uuuu
    应该返回一些可酸洗的内容。而
    \uuuu setstate\uuuu
    (从磁盘加载后)将重新查看此对象作为其唯一参数,并应重建当前实例。大多数
    \uuu getstate\uuu
    的实现要么返回touple,要么返回dict,但我想这取决于您
  • 请注意,覆盖这些方法也会改变
    copy.copy
    copy.deepcopy
    的工作方式(如果在这些方法中进行一些验证,可能会带来严重的痛苦) 例如,我们来看看这个实现(这是我代码中的一个片段,这里我覆盖了一些超类中的pickle方法):


    \uuuu getstate\uuuu
    \uuu setstate\uuuuu
    实现是什么样子的?
    def __getstate__(self):
        state = super(Simulation, self).__getstate__()
        state['usercode'] = self.usercode
        return state
    
    def __setstate__(self, state):
        super(Simulation, self).__setstate__(state)
    
        self.usercode = state.get('usercode', 'dosrznrc')