Содержание страницы
12.2. copyreg – Регистрация pickle функций поддержки¶copyreg – Register pickle support functions
Исходный код: Lib/copyreg.py
Модуль copyreg позволяет определять функции, используемые при упаковке (pickling) конкретных объектов. Модули pickle и copy используют эти функции при упаковке/копировании этих объектов. Модуль предоставляет конфигурационную информацию о конструкторах объектов, которые не являются классами. Такие конструкторы могут быть фабричными функциями или экземплярами классов.
-
copyreg.constructor(object)¶ Объявляет object допустимым конструктором. Если object не является вызываемым (и, следовательно, недопустим как конструктор), возбуждается
TypeError.
-
copyreg.pickle(type, function, constructor=None)¶ Объявляет, что function должна использоваться как функция редукции (reduction) для объектов типа тип. функция должна возвращать строку или кортеж, содержащий два или три элемента.
Необязательный параметр constructor, если указан, представляет собой вызываемый объект, который можно использовать для восстановления объекта при вызове с кортежем аргументов, возвращаемых функцией function во время упаковки.
TypeErrorбудет возбуждено, если object является классом или constructor не является вызываемым.См. модуль
pickleдля получения дополнительных сведений об интерфейсе, ожидаемом от function и constructor. Обратите внимание, что атрибутdispatch_tableобъекта pickler или подклассаpickle.Picklerтакже может использоваться для объявления функций приведения (reduction).
12.2.1. Пример¶Example
Пример ниже демонстрирует, как зарегистрировать функцию 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)
pickling a C instance...
>>> p = pickle.dumps(c)
pickling a C instance...