Мне удалось представить некоторые классы C ++ для python с помощью boost. Я определил два отдельных модуля, статически связанных с моим приложением. Я могу использовать классы, определенные в этом модуле, их производные и т. Д.
BOOST_PYTHON_MODULE(module1)
{
class_<MyClass, boost::noncopyable>("MyClass", no_init)
.enable_pickling();
}
Однако я не могу их засолить из-за ошибки, не связанной с засолкой. Атрибут __ module __ неверен для моих классов. Таким образом, рассол не может вернуть класс. Если мои два модуля Python являются «module1» и «module2», а module1 определяет имена классов MyClass, следующий код:
print(module1.MyClass.__name__)
print(module1.MyClass.__module__)
pickle.dumps(module1.MyClass,0)
выведет
MyClass
module2
Traceback (most recent call last):
File "main.py", line 23, in <module>
pickle.dumps(module1.MyClass,0)
_pickle.PicklingError: Can't pickle <class 'module2.MyClass'>: attribute lookup
module2.MyClass failed
Это доказывает, что атрибут __ module __ не заполнен должным образом для этого класса. Я не могу найти обходной путь. Я не нашел людей с подобной проблемой.
Спасибо за любую помощь или предложение.