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 могут также быть используемый для объявления редуцирующей функции.

Пример

В приведенном ниже примере показано, как зарегистрировать функцию 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...