copyreg — Регистрация поддерживающей pickle функции


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

copyreg.constructor(object)

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

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

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

Необязательный параметр constructor, если он предоставлен, является вызываемым объектом, который можно использовать для восстановления объекта при вызове с кортежем аргументов, возвращаемым function во время пиклинга. Будет вызван TypeError, если object является классом или constructor не может быть вызван.

См. модуль pickle для получения более подробной информации об интерфейсе, ожидаемом от function и constructor. Обратите внимание, что атрибут dispatch_table пиклинг объекта или подкласса pickle.Pickler также можно использовать для объявления функций сокращения (reduction functions).

Пример

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

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