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