| :mod:`!copyreg` --- Register :mod:`!pickle` support functions | |
| ============================================================= | |
| .. module:: copyreg | |
| :synopsis: Register pickle support functions. | |
| **Source code:** :source:`Lib/copyreg.py` | |
| .. index:: | |
| pair: module; pickle | |
| pair: module; copy | |
| -------------- | |
| The :mod:`!copyreg` module offers a way to define functions used while pickling | |
| specific objects. The :mod:`pickle` and :mod:`copy` modules use those functions | |
| when pickling/copying those objects. The module provides configuration | |
| information about object constructors which are not classes. | |
| Such constructors may be factory functions or class instances. | |
| .. function:: constructor(object) | |
| Declares *object* to be a valid constructor. If *object* is not callable (and | |
| hence not valid as a constructor), raises :exc:`TypeError`. | |
| .. function:: pickle(type, function, constructor_ob=None) | |
| Declares that *function* should be used as a "reduction" function for objects | |
| of type *type*. *function* must return either a string or a tuple | |
| containing between two and six elements. See the :attr:`~pickle.Pickler.dispatch_table` | |
| for more details on the interface of *function*. | |
| The *constructor_ob* parameter is a legacy feature and is now ignored, but if | |
| passed it must be a callable. | |
| Note that the :attr:`~pickle.Pickler.dispatch_table` attribute of a pickler | |
| object or subclass of :class:`pickle.Pickler` can also be used for | |
| declaring reduction functions. | |
| Example | |
| ------- | |
| The example below would like to show how to register a pickle function and how | |
| it will be used: | |
| >>> import copyreg, copy, pickle | |
| >>> class C: | |
| ... def __init__(self, a): | |
| ... self.a = a | |
| ... | |
| >>> def pickle_c(c): | |
| ... print("pickling a C instance...") | |
| ... return C, (c.a,) | |
| ... | |
| >>> copyreg.pickle(C, pickle_c) | |
| >>> c = C(1) | |
| >>> d = copy.copy(c) # doctest: +SKIP | |
| pickling a C instance... | |
| >>> p = pickle.dumps(c) # doctest: +SKIP | |
| pickling a C instance... |