On Dec 12, 2007, at 11:01 AM, Emin.shopper Martinian.shopper wrote: > Dear Experts, > > I love the pickle module, but I occasionally have problems pickling > a function. For example, if I create an instance g of class f and > assign g.x to a function, then I cannot pickle g (example code > below). I know that I can pickle f separately if I want to, and I > understand why I get the pickling error.
This all has to do with how pickles are able to recreate the objects in question. Pickle can only handle things, basically, with global names. This pretty much means it can handle regular classes and module functions, but not the methods of those classes. Why? Why would it have to? If it can handle the class it just expects that name to be the same class when it brings it back up, it doesn't actually store the class or function itself, just the name. > But is there a way to assign functions to instances of a class > without preventing pickleability? It doesn't seem unreasonable to > me to want to assign functions to instances of a class (after all > functions are first class objects, so why shouldn't I be able to > pass them around?) Is there a better way or is this just a > limitation of pickle? Presumably you could do something with __getstate__ and __setstate__ methods, but this is many cases of "Are you really sure you want to do that?" -- http://mail.python.org/mailman/listinfo/python-list