-
-
Notifications
You must be signed in to change notification settings - Fork 29.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
random.Random implements __getstate__() and __reduce__() #61691
Comments
The random.Random class implements both the __getstate__() and __reduce__() methods. My knowledge of the pickle module is very limited, but apparently this causes __getstate__() never to get called. Maybe this is a remnant from earlier code, or are both methods actually needed? |
__getstate__ is for pickling instances [0], __reduce__ is for pickling the object itself [1] ^0 http://docs.python.org/2/library/pickle.html#object.\_\_getstate__ |
Ramchandra, that is not the behavior that I am able to reproduce. Please see the attached example: in the presence of __reduce__(), __getstate__() is not being called whether the class or an instance its pickled. This is also in consonance with what is stated in the docs, which warn that "Although powerful, implementing __reduce__() directly in your classes is error prone. For this reason, class designers should use the high-level interface (i.e., __getnewargs__(), __getstate__() and __setstate__()) whenever possible". |
Possibly __getstate__ could be removed. That said, I would feel a sense of risk in taking it out -- that method has been present for a *very* long time who knows what might rely on it being there. |
New changeset 68ed5b2ca867 by R David Murray in branch 'default': |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: