jkn wrote: > Hi Peter > > On Apr 3, 8:54 am, Peter Otten <__pete...@web.de> wrote: >> jkn wrote: >> > I'm clearly not understanding the 'can't pickle instancemethod >> > objects' error; can someone help me to understand, >> >> I think classes implemented in C need some extra work to make them >> picklable, and that hasn't been done for instance methods. > > by 'classes implemented in C', doyou mean new-style classes', or what, > please?
Given >>> class A(object): ... def __init__(self, name): ... self.name = name ... def hello(self): ... print "Hello,", self.name ... >>> a = A("Peter") >>> hello = a.hello >>> hello() Hello, Peter the object bound to the name 'hello' is an instance of the 'instancemethod' type: >>> type(hello) <type 'instancemethod'> That type is implemented in C, see http://hg.python.org/cpython/file/9599f091faa6/Objects/classobject.c and doesn't support the pickle protocol while a similar class, functools.partial which is also written in C, see http://hg.python.org/cpython/file/9599f091faa6/Modules/_functoolsmodule.c does: >>> from functools import partial >>> import pickle >>> def hello(obj): ... print "Hi,", obj.name ... >>> hello2 = partial(hello, a) >>> hello2() Hi, Peter >>> s = pickle.dumps(hello2) >>> pickle.loads(s)() Hi, Peter -- http://mail.python.org/mailman/listinfo/python-list