2015-02-18 3 views
0

Я должен мариновать очень большую структуру. Внутри этой структуры мне нужно обновить строку, на которую много раз ссылаются в структуре.Травление нитью

Давайте сделаем проще:

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 класс получает маринованные в виде строки.

[1, 'myStr', 2, 'myStr'] 
[1, 'newStr', 2, 'newStr'] 

Я попытался с __getstate__ и __reduce__, но без удачи. Маринованный результат всегда будет ссылаться на класс StrReference.

Любое предложение?

+0

На самом деле дело: мне нужно StrReference класс мариноваться в виде простой строки. – cabbi

+0

... или мне нужен какой-либо другой способ обновить эти строки сразу в моей большой структуре. – cabbi

ответ

0

Использование __getstate__ и __setstate__

GetState (самость)

Вместо объекта ДИКТ атрибут хранится, вы можете вернуть пользовательское состояние, чтобы быть сохранены, когда объект маринованные , Это состояние будет использоваться setstate когда объект uncalled.

SetState (само, состояние)

Когда объект unpickled, если SetState определено состояние объекта будет передан к нему, вместо того, чтобы непосредственно применен к Dict объекта. Это идет рука в руке с getstate: если оба определены, вы можете представить состояние маринованного объекта, но вы хотите, что бы вы ни хотели.

См http://www.rafekettler.com/magicmethods.html#pickling и https://docs.python.org/2/library/pickle.html#pickling-and-unpickling-normal-class-instances

+0

Я уже сделал это, но маринованный объект останется StrReference, а не строкой. Мне нужно, что когда-то без клавиатуры структура содержит строки. – cabbi

+0

Как вы реализовали эти магические методы? –

+0

def __getstate __ (self): return self.value – cabbi

Смежные вопросы