0

非常に複雑なクラス 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

メソッドをクラスに追加し、同時にピクル可能に保つ方法を知っている人はいますか?

4

1 に答える 1

0

これを試しましたか:

import types, pickle, StringIO

class A(object):
    ## your code here
    pass
a = A()

def printi(self):
    print self.i

A.printi = printi ## sorry this must be the class
a.printi()
out = StringIO.StringIO()
pickle.dump(a,out) # will pickle ?
于 2012-07-26T20:58:20.733 に答える