12.2. copyreg — Registra funções de suporte pickle

Código-fonte: Lib/copyreg.py


O módulo copyreg oferece uma maneira de definir as funções usadas durante a remoção de objetos específicos. Os módulos pickle e copy usam essas funções ao selecionar/copiar esses objetos. O módulo fornece informações de configuração sobre construtores de objetos que não são classes. Esses construtores podem ser funções de fábrica ou instâncias de classes.

copyreg.constructor(object)

Declara object para ser um construtor válido. Se object não puder ser chamado (e, portanto, não for válido como um construtor), gera TypeError.

copyreg.pickle(type, function, constructor=None)

Declara que function deve ser usada como uma função de “redução” para objetos do tipo type. function deve retornar uma string ou uma tupla contendo dois ou três elementos.

O parâmetro opcional constructor, se fornecido, é um objeto que pode ser chamado, que pode ser usado para reconstruir o objeto quando chamado com a tupla de argumentos retornados por function no tempo de decapagem. TypeError será gerado se object for uma classe ou constructor não for chamado.

Veja o módulo pickle para mais detalhes sobre a interface esperada de function e constructor. Note que o atributo dispatch_table de um objeto pickler ou subclasse de pickle.Pickler também podem ser usados para declarar funções de redução.

12.2.1. Exemplo

O exemplo abaixo gostaria de mostrar como registrar uma função de pickle e como ela será usada:

>>> 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...