Home | History | Annotate | Download | only in library
      1 :mod:`copy_reg` --- Register :mod:`pickle` support functions
      2 ============================================================
      3 
      4 .. module:: copy_reg
      5    :synopsis: Register pickle support functions.
      6 
      7 .. note::
      8    The :mod:`copy_reg` module has been renamed to :mod:`copyreg` in Python 3.
      9    The :term:`2to3` tool will automatically adapt imports when converting your
     10    sources to Python 3.
     11 
     12 .. index::
     13    module: pickle
     14    module: cPickle
     15    module: copy
     16 
     17 The :mod:`copy_reg` module offers a way to define functions used while pickling
     18 specific objects.  The :mod:`pickle`, :mod:`cPickle`, and :mod:`copy` modules
     19 use those functions when pickling/copying those objects.  The module provides
     20 configuration information about object constructors which are not classes.
     21 Such constructors may be factory functions or class instances.
     22 
     23 
     24 .. function:: constructor(object)
     25 
     26    Declares *object* to be a valid constructor.  If *object* is not callable (and
     27    hence not valid as a constructor), raises :exc:`TypeError`.
     28 
     29 
     30 .. function:: pickle(type, function[, constructor])
     31 
     32    Declares that *function* should be used as a "reduction" function for objects of
     33    type *type*; *type* must not be a "classic" class object.  (Classic classes are
     34    handled differently; see the documentation for the :mod:`pickle` module for
     35    details.)  *function* should return either a string or a tuple containing two or
     36    three elements.
     37 
     38    The optional *constructor* parameter, if provided, is a callable object which
     39    can be used to reconstruct the object when called with the tuple of arguments
     40    returned by *function* at pickling time.  :exc:`TypeError` will be raised if
     41    *object* is a class or *constructor* is not callable.
     42 
     43    See the :mod:`pickle` module for more details on the interface expected of
     44    *function* and *constructor*.
     45 
     46 Example
     47 -------
     48 
     49 The example below would like to show how to register a pickle function and how
     50 it will be used:
     51 
     52    >>> import copy_reg, copy, pickle
     53    >>> class C(object):
     54    ...     def __init__(self, a):
     55    ...         self.a = a
     56    ...
     57    >>> def pickle_c(c):
     58    ...     print("pickling a C instance...")
     59    ...     return C, (c.a,)
     60    ...
     61    >>> copy_reg.pickle(C, pickle_c)
     62    >>> c = C(1)
     63    >>> d = copy.copy(c)
     64    pickling a C instance...
     65    >>> p = pickle.dumps(c)
     66    pickling a C instance...
     67