まあ、これはかなり面白いです。データベースにシリアル化されたオブジェクトを格納してから、キーからオブジェクトの状態を復元する
コードを説明します最高の私が考えている:
class Restorable(object):
def __init__(self, a=1, b=1):
self.a = a
self.b = b
def restore(self, serialized_object):
# I'm aware this is local, just illustrating
self = pickle.loads(serialized_object)
r = Restorable()
r.a = 1000
r.b = 2000
saved_state = pickle.dumps(r)
r.a = -1
r.b = -1
r.restore(pickle.dumps(saved_state)
# r.a should again be 1000
# r.b should again be 2000
考え方は次のとおりです、たとえば、pickle.dumps()
オブジェクト、どこかに保存し、実際のオブジェクトを変更し、後でそれを復元することが可能であろう私が安全に保管していたものを元の状態に戻すことができますか?
私は上に示したコードを試しましたが、self
を前の状態に設定しましたが、驚くことはありません。
これは好奇心の質問です。
EDIT:明確な方法で問題を定式化するために:
は、同じタイプのシリアライズされたオブジェクトを使用して、その状態を復元しますオブジェクトを記述することが可能ですか?
実際には、restore()
の内部にシリアル化されたオブジェクトのインスタンスを作成し、値を1つずつコピーすることでこれを行うことができます。しかし、これは大きなオブジェクトには面倒かもしれません。
わからない...あなたがunpickle化から新鮮な、新しいオブジェクトを取得 – Randy
号。なぜあなたはこれをやろうとしていますか? –
+1にS.Lott - http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#id3を読んで、なぜこれを行う必要があり、どのような目的のために必要かを2回考えてください。ピッキングは新しいインスタンスを作成するので、初期オブジェクトを復元するステップを追加する理由はありません。 –