非常に複雑なクラス A のインスタンスがあり、それに関数を追加してピクルできるようにしたいと考えています。私は2つのアプローチを試みましたが、どちらも機能しません。1 つ目は、クラスの継承を行うことです。これは、私が望むすべてをコピーしていないようです。
import pickle, StringIO
class A:
def __init__(self):
self.i=1
class B(A):
def __init__(self, a):
self = a
def printi(self):
print self.i
a = A()
b = B(a)
out = StringIO.StringIO()
pickle.dump(b,out)
b.printi() # error, cannot find i
もう 1 つの戦略は、新しい関数をインスタンスに直接追加することです。しかし、これは漬けません。
import types, pickle, StringIO
a = A()
def printi(self):
print self.i
a.printi = types.MethodType(printi, a)
a.printi()
out = StringIO.StringIO()
pickle.dump(a,out) # will not pickle
メソッドをクラスに追加し、同時にピクル可能に保つ方法を知っている人はいますか?