17db96d56Sopenharmony_ci:mod:`copyreg` --- Register :mod:`pickle` support functions
27db96d56Sopenharmony_ci===========================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: copyreg
57db96d56Sopenharmony_ci   :synopsis: Register pickle support functions.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci**Source code:** :source:`Lib/copyreg.py`
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci.. index::
107db96d56Sopenharmony_ci   pair: module; pickle
117db96d56Sopenharmony_ci   pair: module; copy
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci--------------
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ciThe :mod:`copyreg` module offers a way to define functions used while pickling
167db96d56Sopenharmony_cispecific objects.  The :mod:`pickle` and :mod:`copy` modules use those functions
177db96d56Sopenharmony_ciwhen pickling/copying those objects.  The module provides configuration
187db96d56Sopenharmony_ciinformation about object constructors which are not classes.
197db96d56Sopenharmony_ciSuch constructors may be factory functions or class instances.
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci.. function:: constructor(object)
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci   Declares *object* to be a valid constructor.  If *object* is not callable (and
257db96d56Sopenharmony_ci   hence not valid as a constructor), raises :exc:`TypeError`.
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci.. function:: pickle(type, function, constructor_ob=None)
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci   Declares that *function* should be used as a "reduction" function for objects
317db96d56Sopenharmony_ci   of type *type*.  *function* must return either a string or a tuple
327db96d56Sopenharmony_ci   containing between two and six elements. See the :attr:`~pickle.Pickler.dispatch_table`
337db96d56Sopenharmony_ci   for more details on the interface of *function*.
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci   The *constructor_ob* parameter is a legacy feature and is now ignored, but if
367db96d56Sopenharmony_ci   passed it must be a callable.
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci   Note that the :attr:`~pickle.Pickler.dispatch_table` attribute of a pickler
397db96d56Sopenharmony_ci   object or subclass of :class:`pickle.Pickler` can also be used for
407db96d56Sopenharmony_ci   declaring reduction functions.
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ciExample
437db96d56Sopenharmony_ci-------
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ciThe example below would like to show how to register a pickle function and how
467db96d56Sopenharmony_ciit will be used:
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci   >>> import copyreg, copy, pickle
497db96d56Sopenharmony_ci   >>> class C:
507db96d56Sopenharmony_ci   ...     def __init__(self, a):
517db96d56Sopenharmony_ci   ...         self.a = a
527db96d56Sopenharmony_ci   ...
537db96d56Sopenharmony_ci   >>> def pickle_c(c):
547db96d56Sopenharmony_ci   ...     print("pickling a C instance...")
557db96d56Sopenharmony_ci   ...     return C, (c.a,)
567db96d56Sopenharmony_ci   ...
577db96d56Sopenharmony_ci   >>> copyreg.pickle(C, pickle_c)
587db96d56Sopenharmony_ci   >>> c = C(1)
597db96d56Sopenharmony_ci   >>> d = copy.copy(c)  # doctest: +SKIP
607db96d56Sopenharmony_ci   pickling a C instance...
617db96d56Sopenharmony_ci   >>> p = pickle.dumps(c)  # doctest: +SKIP
627db96d56Sopenharmony_ci   pickling a C instance...
63