Message148770
> The attached patch makes pickle use an object's __qualname__ attribute
> if __name__ does not work.
>
> This makes nested classes, unbound instance methods and static methods
> picklable (assuming that __module__ and __qualname__ give the correct
> "address").
Thanks. I'm not sure that's a good approach for protocol 3: some pickles
created by Python 3.3 would not be readable by Python 3.2. That's why I
initially added that idea to PEP 3154, for a hypothetical protocol 4.
However, perhaps it is possible to use the same reduce/getattr trick you
are proposing for instance methods?
> BTW, It would not be hard to make instance methods picklable (and, as
> a by-product, class methods) by giving instance methods a __reduce__
> method equivalent to
>
> def __reduce__(self):
> return (getattr, (self.__self__, self.__name__))
>
> Is there any reason not to make such a change?
I don't see any personally. Actually, multiprocessing has a Pickler
subclass called ForkingPickler which does something similar (in
Lib/multiprocessing/forking.py). |
|
Date |
User |
Action |
Args |
2011-12-02 19:10:40 | pitrou | set | recipients:
+ pitrou, vstinner, sbt |
2011-12-02 19:10:40 | pitrou | link | issue13520 messages |
2011-12-02 19:10:39 | pitrou | create | |
|