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