作爲一名最近嘗試使用Python的iOS開發人員,我很想知道是否有像NSCoding
這樣的東西可以讓我實現一個方法或一對方法,這些方法可以定義我的對象如何自動保存到磁盤,很像NSCoding
。在Python中是否存在類似於NSCoding的工具?
我找到了this repo,但我不確定它是否是更大的框架的一部分,我不想將它納入我的(小)項目。
是否有東西附帶Python?在那裏流行的那些以原始而強大的方式處理對象持久化的東西?
作爲一名最近嘗試使用Python的iOS開發人員,我很想知道是否有像NSCoding
這樣的東西可以讓我實現一個方法或一對方法,這些方法可以定義我的對象如何自動保存到磁盤,很像NSCoding
。在Python中是否存在類似於NSCoding的工具?
我找到了this repo,但我不確定它是否是更大的框架的一部分,我不想將它納入我的(小)項目。
是否有東西附帶Python?在那裏流行的那些以原始而強大的方式處理對象持久化的東西?
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
至於__getstate__
和__setstate__
這裏有一些註釋:
__getstate__
應該返回一些pickleable。而且從__setstate__
(從磁盤加載後)將會收回這個對象,因爲它是唯一的參數,並且應該重建當前實例。大多數__getstate__
的實現都會返回touple或dict,但我想這取決於你。copy.copy
和copy.deepcopy
的工作方式(如果您在這些方法中進行一些驗證,可能會產生嚴重的痛苦)。至於示例實現需要看看這個(它是從我的代碼剪斷了,這裏我重寫一些超泡菜的方法):
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')
會是什麼'__getstate__'和'__setstate__'實現看起來像? – Moshe