copyreg — Регистр pickle вспомогательных функций

Источник: Lib/copyreg.py


Модуль copyreg позволяет определить функции, используемые при пикеле определенных объектов. Модули pickle и copy используют эти функции при пикировании/копировании этих объектов. Модуль предоставляет конфигурационную информацию о конструкторах объектов, которые не являются классами. Такие конструкторы могут быть фабричными функциями или экземплярами классов.

copyreg.constructor(object)

Объявляет object допустимым конструктором. Если object не является вызываемым (и, следовательно, не является допустимым конструктором), поднимается TypeError.

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

Объявляет, что function должна использоваться в качестве «редукционной» функции для объектов типа type. function должна возвращать либо строку, либо кортеж, содержащий от двух до шести элементов. Подробнее об интерфейсе function см. в dispatch_table.

Параметр constructor_ob является устаревшей функцией и теперь игнорируется, но если он передается, то должен быть вызываемым.

Обратите внимание, что атрибут dispatch_table объекта pickler или подкласса pickle.Pickler также может быть использован для объявления функций редукции.

Пример

В примере ниже мы хотим показать, как зарегистрировать функцию pickle и как она будет использоваться:

>>> 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)  
pickling a C instance...
>>> p = pickle.dumps(c)  
pickling a C instance...