【问题标题】:adding a method to a python class while preserving picklability在保留可挑选性的同时向 python 类添加方法
【发布时间】:2012-07-26 20:51:42
【问题描述】:

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

有没有人知道一种方法可以将方法添加到类并同时保持它的可提取性?

【问题讨论】:

    标签: python inheritance instance pickle


    【解决方案1】:

    你试过了吗:

    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 ?
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-11
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多