向python类添加方法,同时保留可拾取性

向python类添加方法,同时保留可拾取性,python,inheritance,instance,pickle,Python,Inheritance,Instance,Pickle,我有一个非常复杂的类a的实例,我希望向它添加一个函数并能够对其进行pickle。我试过两种方法,都不管用。第一个是类继承,它似乎没有复制我想要的一切: 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.

我有一个非常复杂的类a的实例,我希望向它添加一个函数并能够对其进行pickle。我试过两种方法,都不管用。第一个是类继承,它似乎没有复制我想要的一切:

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
是否有人知道如何将方法添加到类中并同时保持其可拾取性?

您是否尝试过以下方法:

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 ?