This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author ethan.furman
Recipients alexandre.vassalotti, barry, eli.bendersky, ethan.furman, gvanrossum, larry, pitrou, python-dev, serhiy.storchaka
Date 2014-02-21.02:36:15
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1392950175.7.0.623980151525.issue20653@psf.upfronthosting.co.za>
In-reply-to
Content
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.
History
Date User Action Args
2014-02-21 02:36:15ethan.furmansetrecipients: + ethan.furman, gvanrossum, barry, pitrou, larry, alexandre.vassalotti, eli.bendersky, python-dev, serhiy.storchaka
2014-02-21 02:36:15ethan.furmansetmessageid: <1392950175.7.0.623980151525.issue20653@psf.upfronthosting.co.za>
2014-02-21 02:36:15ethan.furmanlinkissue20653 messages
2014-02-21 02:36:15ethan.furmancreate