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...