copyreg — Функции поддержки регистра pickle

Исходный код: Lib/copyreg.py.


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

copyreg.constructor(object)

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

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

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

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

Более подробно об интерфейсе, ожидаемом от функции и конструктора, смотрите в модуле pickle. Обратите внимание, что атрибут 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...
Вернуться на верх