changeset: 80304:12dbb3187105 branch: 3.2 parent: 80301:ea04a7d2407d user: Ezio Melotti date: Thu Nov 08 11:04:57 2012 +0200 files: Doc/library/copy.rst Doc/library/copyreg.rst description: #11481: update copyreg docs and add example. diff -r ea04a7d2407d -r 12dbb3187105 Doc/library/copy.rst --- a/Doc/library/copy.rst Thu Nov 08 10:11:22 2012 +0200 +++ b/Doc/library/copy.rst Thu Nov 08 11:04:57 2012 +0200 @@ -67,8 +67,8 @@ Classes can use the same interfaces to control copying that they use to control pickling. See the description of module :mod:`pickle` for information on these -methods. The :mod:`copy` module does not use the :mod:`copyreg` registration -module. +methods. In fact, :mod:`copy` module uses the registered pickle functions from +:mod:`copyreg` module. .. index:: single: __copy__() (copy protocol) diff -r ea04a7d2407d -r 12dbb3187105 Doc/library/copyreg.rst --- a/Doc/library/copyreg.rst Thu Nov 08 10:11:22 2012 +0200 +++ b/Doc/library/copyreg.rst Thu Nov 08 11:04:57 2012 +0200 @@ -9,9 +9,10 @@ module: pickle module: copy -The :mod:`copyreg` module provides support for the :mod:`pickle` module. The -:mod:`copy` module is likely to use this in the future as well. It provides -configuration information about object constructors which are not classes. +The :mod:`copyreg` module offers a way to define fuctions 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. @@ -35,3 +36,25 @@ See the :mod:`pickle` module for more details on the interface expected of *function* and *constructor*. + +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(object): + ... 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) + pickling a C instance... + >>> p = pickle.dumps(c) + pickling a C instance...