0

我有一个非常复杂的类 A 的实例,我希望向它添加一个函数并能够腌制它。我尝试了两种方法,但都不起作用。首先是去类继承,这似乎并没有复制我想要的一切:

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

另一种策略是直接将新函数添加到实例中。但这不会腌制。

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 回答