Содержание страницы
11.3. copy_reg – Регистрация pickle вспомогательных функций¶copy_reg – Register pickle support functions
Примечание
Модуль copy_reg был переименован в copyreg в Python 3.
Инструмент 2to3 автоматически адаптирует импорты при преобразовании исходного кода в Python 3.
Модуль copy_reg предоставляет способ определения функций, используемых при упаковке (pickling) конкретных объектов. Модули pickle, cPickle и copy используют эти функции при упаковке/копировании таких объектов. Модуль предоставляет информацию о конфигурации конструкторов объектов, которые не являются классами. Такие конструкторы могут быть фабричными функциями или экземплярами классов.
-
copy_reg.constructor(object)¶ Объявляет object допустимым конструктором. Если object не является вызываемым (и, следовательно, недопустим как конструктор), возбуждается
TypeError.
-
copy_reg.pickle(type, function[, constructor])¶ Объявляет, что function должна использоваться как функция восстановления для объектов типа type; type не должен быть объектом «классического» класса. (Классические классы обрабатываются иначе; подробнее см. документацию модуля
pickle.) function должна возвращать строку или кортеж из двух или трёх элементов.Необязательный параметр constructor, если указан, представляет собой вызываемый объект, который можно использовать для восстановления объекта при вызове с кортежем аргументов, возвращаемых функцией function во время упаковки.
TypeErrorбудет возбуждено, если object является классом или constructor не является вызываемым.Подробнее об интерфейсе, ожидаемом от function и constructor, см. в модуле
pickle.
11.3.1. Пример¶Example
Пример ниже демонстрирует, как зарегистрировать функцию pickle и как она будет использоваться:
>>> import copy_reg, 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,)
...
>>> copy_reg.pickle(C, pickle_c)
>>> c = C(1)
>>> d = copy.copy(c)
pickling a C instance...
>>> p = pickle.dumps(c)
pickling a C instance...