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