Я работал над многопроцессорной обработкой и расширениями C++, и я не совсем понимаю функцию __getstate_manages_dict__
(я знаю, как ее использовать, но я не совсем уверен, как она работает). Документация boost/Python для поддержка рассола говорит следующее:
Автор класса расширения Boost.Python может предоставить метод
__getstate__
, не принимая во внимание возможность того, что: * его класс используется в Python в качестве базового класса. Скорее всего, dict экземпляров производного класса необходимо замариновать, чтобы правильно восстановить экземпляры. * пользователь напрямую добавляет элементы в__dict__
экземпляра. Опять же,__dict__
экземпляра необходимо замариновать.
Чтобы предупредить пользователя об этой весьма неочевидной проблеме, предусмотрено защитное ограждение. Если
__getstate__
определено, а__dict__
экземпляра не пусто, Boost.Python проверяет, есть ли у класса атрибут__getstate_manages_dict__
. Исключение возникает, если этот атрибут не определен:
Я видел несколько примеров, когда __dict__
объекта возвращается в __getstate__
, а затем обновляется в __setstate__
. Что это __dict__
имеет в виду? Является ли это атрибутом __dict__
объекта производного класса? Кроме того, почему этот dict должен обрабатываться явно, если pickle вызывает __init__
для создания нового объекта, а затем устанавливает атрибут?
Спасибо