У меня есть два разных модуля расширения Python; давайте назовем их A и B. Модуль A содержит тип класса хранения, называемый контейнером, который я хочу использовать в модуле B в качестве возвращаемого типа метода класса.
Кажется, я не могу найти документацию о том, как я должен это делать. Я примерно следовал этой статье, чтобы создать модули / классы, за исключением того, что я не объявил все методы как статические, чтобы они были доступны: http://nedbatchelder.com/text/whirlext.html
Тогда у меня вопрос, как мне создать экземпляр контейнера, который я могу передать обратно как значение PyObject * метода класса в модуле B? Определение контейнера выглядит следующим образом:
typedef struct {
PyObject_HEAD
storageclass* cnt_;
} container;
Я попытался просто сделать следующее в рассматриваемом методе, где container_init - это метод, который я зарегистрировал как tp_init для класса контейнера:
pycnt::container* retval;
pycnt::container_init(retval, NULL, NULL);
return (PyObject*)retval;
Однако, согласно интерпретатору Python, я возвращаю класс, для которого я вызвал метод. (т.е. myclassinstance.mymethod () возвращает myclassinstance).
Я, очевидно, поступаю неправильно, но я понятия не имею, что такое правильный путь. Какие-либо предложения? Просто чтобы отрезать кого-либо, кто собирается это предложить - нет, я не заинтересован в использовании SWIG или Boost :: Python. Я уже пробовал это сделать, и базовый класс хранилища для контейнера тоже не очень понравился (SWIG даже не смог разобрать). До сих пор выполнение расширений само по себе было довольно безболезненным, но я в тупике.