腌制字符串引用

时间:2015-02-18 21:55:00

标签: python-2.7 pickle

我必须腌制一个非常大的结构。在这个结构中,我必须更新在结构中多次引用的字符串。

让它变得更容易:

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类。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

使用__getstate____setstate__

  

<强>有getstate (个体)

     

而不是存储对象的 dict 属性,您可以返回一个自定义状态,以便在对象存储时存储   腌制。当对象出现时, setstate 将使用该状态   拆封。

     

setstate (自我,状态)

     

当对象被打开时,如果定义了 setstate ,则对象的状态将被传递给它,而不是直接应用于对象的 dict 。这就是事   与 getstate 一起使用:当两者都已定义时,您可以表示   对象的腌制状态,无论你想要什么,你都想要它。

请参阅http://www.rafekettler.com/magicmethods.html#picklinghttps://docs.python.org/2/library/pickle.html#pickling-and-unpickling-normal-class-instances