我必须腌制一个非常大的结构。在这个结构中,我必须更新在结构中多次引用的字符串。
让它变得更容易:
myStruct = [1, 'myStr', 2, 'myStr']
该计划应该更新“myStr”。同时具有新价值。 为了实现这一点,我做了一个像这样的字符串引用类:
class StrReference(object):
def __init__(self):
self.value = 'myStr'
myRefStr = StrReference()
myStruct = [1, myRefStr, 2, myRefStr]
现在我可以更新myRefStr.value = 'newStr'
我需要挑选myStruct
个对象,以便将StrReference
类作为字符串进行pickle。
[1, 'myStr', 2, 'myStr']
[1, 'newStr', 2, 'newStr']
我确实试过__getstate__
和__reduce__
,但没有运气。
腌制结果将始终引用StrReference
类。
有什么建议吗?
答案 0 :(得分:0)
使用__getstate__
和__setstate__
<强>有getstate 强>(个体)
而不是存储对象的 dict 属性,您可以返回一个自定义状态,以便在对象存储时存储 腌制。当对象出现时, setstate 将使用该状态 拆封。
setstate (自我,状态)
当对象被打开时,如果定义了 setstate ,则对象的状态将被传递给它,而不是直接应用于对象的 dict 。这就是事 与 getstate 一起使用:当两者都已定义时,您可以表示 对象的腌制状态,无论你想要什么,你都想要它。
请参阅http://www.rafekettler.com/magicmethods.html#pickling和https://docs.python.org/2/library/pickle.html#pickling-and-unpickling-normal-class-instances