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

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


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

copyreg.constructor(object)

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

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

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

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

Обратите внимание, что атрибут dispatch_table объекта выбора или подкласса 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...
Вернуться на верх