作为最近尝试使用Python的iOS开发人员,我很想知道是否有类似NSCoding
的东西可以让我实现一个方法或一对方法来定义我的对象如何自动保存到磁盘,很像NSCoding
。
我发现this repo但我不确定它是否是更大框架的一部分,我宁愿不将其纳入我的(小)项目。
Python附带了什么东西吗?那些受欢迎的东西以原始但强大的方式处理对象持久性?
答案 0 :(得分:2)
pickle
模块用于序列化对象。
http://docs.python.org/2/library/pickle.html
您通常可以按原样使用它,但如果您需要定义对象的序列化方式,则可以覆盖特殊方法,__getstate__
和__setstate__
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
答案 1 :(得分:0)
至于__getstate__
和__setstate__
实现,这里有一些注释:
__getstate__
应该返回一些可拾取的内容。 __setstate__
(从磁盘加载后)将重新捕获此对象作为唯一参数,并应重建当前实例。大多数__getstate__
的实现都会返回touple或dict,但我想这取决于你。 copy.copy
和copy.deepcopy
的工作方式(如果在这些方法中进行一些验证,可能会造成严重的痛苦)。 至于示例实现,请看一下(它是从我的代码中删除的,在这里我覆盖了一些超类的pickle方法):
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')