On Thu, 2009-04-16 at 13:33 +0200, Hrvoje Niksic wrote: > mousemeat <mousem...@gmail.com> writes: > > > Correct me if i am wrong, but i can pickle an object that contains a > > bound method (it's own bound method). > > No, you can't: > > >>> import cPickle as p > >>> p.dumps([]) > '(l.' > >>> p.dumps([].append) > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: expected string or Unicode object, NoneType found
Yes he can. mousemeat stated that he could pickle an object that *contains* a bound method, not that he could pickle the method itself. That said, you can make an instance method out of a lambda, just as well as any named function, and you can pickle that object, too: Python 2.5.2 (r252:60911, Oct 5 2008, 19:29:17) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cPickle as p >>> class Foo(object): ... a = lambda self, x: x+1 >>> foo.a(1) 2 >>> type(foo.a) <type 'instancemethod'> >>> p.dumps(foo) 'ccopy_reg\n_reconstructor\np1\n(c__main__\nFoo\np2\nc__builtin__ \nobject\np3\nNtRp4\n.' Cheers, Cliff -- http://mail.python.org/mailman/listinfo/python-list