在保留可选择性的同时向python类添加方法

时间:2012-07-26 20:51:43

标签: python inheritance instance pickle

我有一个非常复杂的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

有没有人知道如何在类中添加方法并同时保持可选择性?

1 个答案:

答案 0 :(得分: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 ?