copyreg
— Регистрация функций поддержки pickle
¶
Исходный код: Lib/copyreg.py
Модуль 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...