Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
c8148265
Commit
c8148265
authored
Oct 17, 2010
by
Georg Brandl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Port changes to pickle docs apparently lost in py3k.
parent
8527126f
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
85 additions
and
79 deletions
+85
-79
Doc/library/pickle.rst
Doc/library/pickle.rst
+85
-79
No files found.
Doc/library/pickle.rst
View file @
c8148265
...
@@ -427,33 +427,38 @@ implementation of this behaviour::
...
@@ -427,33 +427,38 @@ implementation of this behaviour::
obj.__dict__.update(attributes)
obj.__dict__.update(attributes)
return obj
return obj
.. index:: single: __getnewargs__() (copy protocol)
Classes can alter the default behaviour by providing one or several special
Classes can alter the default behaviour by providing one or several special
methods. In protocol 2 and newer, classes that implements the
methods:
:meth:`__getnewargs__` method can dictate the values passed to the
:meth:`__new__` method upon unpickling. This is often needed for classes
whose :meth:`__new__` method requires arguments.
..
index:: single: __getstate__() (copy protocol
)
..
method:: object.__getnewargs__(
)
Classes can further influence how their instances are pickled; if the class
In protocol 2 and newer, classes that implements the :meth:`__getnewargs__`
defines the method :meth:`__getstate__`, it is called and the returned object is
method can dictate the values passed to the :meth:`__new__` method upon
pickled as the contents for the instance, instead of the contents of the
unpickling. This is often needed for classes whose :meth:`__new__` method
instance's dictionary. If the :meth:`__getstate__` method is absent, the
requires arguments.
instance's :attr:`__dict__` is pickled as usual.
.. index:: single: __setstate__() (copy protocol)
Upon unpickling, if the class defines :meth:`__setstate__`, it is called with
.. method:: object.__getstate__()
the unpickled state. In that case, there is no requirement for the state object
to be a dictionary. Otherwise, the pickled state must be a dictionary and its
items are assigned to the new instance's dictionary.
.. note::
Classes can further influence how their instances are pickled; if the class
defines the method :meth:`__getstate__`, it is called and the returned object
is pickled as the contents for the instance, instead of the contents of the
instance's dictionary. If the :meth:`__getstate__` method is absent, the
instance's :attr:`__dict__` is pickled as usual.
.. method:: object.__setstate__(state)
Upon unpickling, if the class defines :meth:`__setstate__`, it is called with
the unpickled state. In that case, there is no requirement for the state
object to be a dictionary. Otherwise, the pickled state must be a dictionary
and its items are assigned to the new instance's dictionary.
.. note::
If :meth:`__getstate__` returns a false value, the :meth:`__setstate__`
If :meth:`__getstate__` returns a false value, the :meth:`__setstate__`
method will not be called.
method will not be called upon unpickling.
Refer to the section :ref:`pickle-state` for more information about how to use
Refer to the section :ref:`pickle-state` for more information about how to use
the methods :meth:`__getstate__` and :meth:`__setstate__`.
the methods :meth:`__getstate__` and :meth:`__setstate__`.
...
@@ -462,14 +467,12 @@ the methods :meth:`__getstate__` and :meth:`__setstate__`.
...
@@ -462,14 +467,12 @@ the methods :meth:`__getstate__` and :meth:`__setstate__`.
At unpickling time, some methods like :meth:`__getattr__`,
At unpickling time, some methods like :meth:`__getattr__`,
:meth:`__getattribute__`, or :meth:`__setattr__` may be called upon the
:meth:`__getattribute__`, or :meth:`__setattr__` may be called upon the
instance. In case those methods rely on some internal invariant being
instance. In case those methods rely on some internal invariant being
true,
t
rue, the type should implement either :meth:`__getinitargs__` or
t
he type should implement :meth:`__getnewargs__` to establish such an
:meth:`__getnewargs__` to establish such an invariant; otherwise, neither
invariant; otherwise, neither :meth:`__new__` nor :meth:`__init__` will be
:meth:`__new__` nor :meth:`__init__` will be
called.
called.
.. index::
.. index:: pair: copy; protocol
pair: copy; protocol
single: __reduce__() (copy protocol)
As we shall see, pickle does not use directly the methods described above. In
As we shall see, pickle does not use directly the methods described above. In
fact, these methods are part of the copy protocol which implements the
fact, these methods are part of the copy protocol which implements the
...
@@ -480,58 +483,61 @@ objects. [#]_
...
@@ -480,58 +483,61 @@ objects. [#]_
Although powerful, implementing :meth:`__reduce__` directly in your classes is
Although powerful, implementing :meth:`__reduce__` directly in your classes is
error prone. For this reason, class designers should use the high-level
error prone. For this reason, class designers should use the high-level
interface (i.e., :meth:`__getnewargs__`, :meth:`__getstate__` and
interface (i.e., :meth:`__getnewargs__`, :meth:`__getstate__` and
:meth:`__setstate__`) whenever possible. We will show, however, cases where using
:meth:`__setstate__`) whenever possible. We will show, however, cases where
:meth:`__reduce__` is the only option or leads to more efficient pickling or
using :meth:`__reduce__` is the only option or leads to more efficient pickling
both.
or both.
.. method:: object.__reduce__()
The interface is currently defined as follows.
The :meth:`__reduce__` method
The interface is currently defined as follows.
The :meth:`__reduce__` method
takes no argument and shall return either a string or preferably a tuple (the
takes no argument and shall return either a string or preferably a tuple (the
returned object is often referred to as the "reduce value").
returned object is often referred to as the "reduce value").
If a string is returned, the string should be interpreted as the name of a
If a string is returned, the string should be interpreted as the name of a
global variable. It should be the object's local name relative to its module;
global variable. It should be the object's local name relative to its
the pickle module searches the module namespace to determine the object's
module; the pickle module searches the module namespace to determine the
module. This behaviour is typically useful for singletons.
object's
module. This behaviour is typically useful for singletons.
When a tuple is returned, it must be between two and five items long. Optional
When a tuple is returned, it must be between two and five items long.
items can either be omitted, or ``None`` can be provided as their value. The
Optional items can either be omitted, or ``None`` can be provided as their
semantics of each item are in order:
value. The
semantics of each item are in order:
.. XXX Mention __newobj__ special-case?
.. XXX Mention __newobj__ special-case?
* A callable object that will be called to create the initial version of the
* A callable object that will be called to create the initial version of the
object.
object.
* A tuple of arguments for the callable object. An empty tuple must be given if
* A tuple of arguments for the callable object. An empty tuple must be given
the callable does not accept any argument.
if
the callable does not accept any argument.
* Optionally, the object's state, which will be passed to the object's
* Optionally, the object's state, which will be passed to the object's
:meth:`__setstate__` method as previously described. If the object has no
:meth:`__setstate__` method as previously described. If the object has no
such method then, the value must be a dictionary and it will be added to the
such method then, the value must be a dictionary and it will be added to
object's :attr:`__dict__` attribute.
the object's :attr:`__dict__` attribute.
* Optionally, an iterator (and not a sequence) yielding successive items. These
* Optionally, an iterator (and not a sequence) yielding successive items.
items will be appended to the object either using ``obj.append(item)`` or, in
These items will be appended to the object either using
batch, using ``obj.extend(list_of_items)``. This is primarily used for list
``obj.append(item)`` or, in batch, using ``obj.extend(list_of_items)``.
subclasses, but may be used by other classes as long as they have
This is primarily used for list subclasses, but may be used by other
:meth:`append` and :meth:`extend` methods with the appropriate signature.
classes as long as they have :meth:`append` and :meth:`extend` methods with
(Whether :meth:`append` or :meth:`extend` is used depends on which pickle
the appropriate signature. (Whether :meth:`append` or :meth:`extend` is
protocol version is used as well as the number of items to append, so both
used depends on which pickle protocol version is used as well as the number
must be supported.)
of items to append, so both must be supported.)
* Optionally, an iterator (not a sequence) yielding successive key-value pairs.
* Optionally, an iterator (not a sequence) yielding successive key-value
These items will be stored to the object using ``obj[key] = value``. This is
pairs. These items will be stored to the object using ``obj[key] =
primarily used for dictionary subclasses, but may be used by other classes as
value``. This is primarily used for dictionary subclasses, but may be used
long as they implement :meth:`__setitem__`.
by other classes as long as they implement :meth:`__setitem__`.
.. index:: single: __reduce_ex__() (copy protocol)
.. method:: object.__reduce_ex__(protocol)
Alternatively, a :meth:`__reduce_ex__` method may be defined. The only
difference is this method should take a single integer argument, the protocol
Alternatively, a :meth:`__reduce_ex__` method may be defined. The only
version. When defined, pickle will prefer it over the :meth:`__reduce__`
difference is this method should take a single integer argument, the protocol
method. In addition, :meth:`__reduce__` automatically becomes a synonym for the
version. When defined, pickle will prefer it over the :meth:`__reduce__`
extended version. The main use for this method is to provide
method. In addition, :meth:`__reduce__` automatically becomes a synonym for
backwards-compatible reduce values for older Python releases.
the extended version. The main use for this method is to provide
backwards-compatible reduce values for older Python releases.
.. _pickle-persistent:
.. _pickle-persistent:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment