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