Ethan Furman added the comment:

When I implemented pickle support I did not have a complete understanding of 
the pickle protocols nor how to best use them.  As a result, I picked 
__getnewargs__ and only supported protocols 2 and 3 (4 didn't exist yet).

Serhiy came along and explained a bunch of it to me, so now I know that 
__reduce_ex__ is the best choice [1] as it supports all the protocol levels, 
and is always used.  The patch removes __getnewargs__ and makes __reduce_ex__ 
The One Obvious Way, but if it does not go in to 3.4.0 then I won't be able to 
remove __getnewargs__ because of backwards compatibility.

All the tests still pass, and the new test for subclassing to pickle by name 
passes.


[1] pickle supports two low-level methods: __reduce__ and __reduce_ex__; 
__reduce_ex__ is more powerful and is the preferred method.  If a mix-in class 
to Enum defines __reduce_ex__ and Enum only defines __reduce__, Enum's 
__reduce__ will not be called.

----------
priority: normal -> high
resolution: fixed -> 
stage: committed/rejected -> commit review
status: closed -> open
versions: +Python 3.4 -Python 3.5

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue20653>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to