Каково точное требование для определения функции python tp_call? - PullRequest
0 голосов
/ 03 июня 2011

Я связываю классы C ++ с Python и нашел интересное решение предыдущей проблемы, к сожалению, это привело к другому вопросу, на который, похоже, тоже нет простого ответа.

Я обертываю каждую функцию в «вызываемый» PyObject, что делает его вызываемым из-за наличия определения функции call (сторона C, это метод tp_call в PyTypeObject).

Кажется, что tp_call принимает троичную функцию, которая просто принимает (PyObject *, PyObject *, PyObject *) в качестве списка аргументов.
Теперь проблема в том, что мне нужно, чтобы эта функция простозаменить PyCFunction, которая просто принимает аргументы (PyObject * self, PyObject * args).Теперь на стороне Python это можно сделать легко, но на стороне C, похоже, нужна троичная функция, когда я просто хочу двоичную, так есть ли возможность сделать вызываемую функцию простой, используя указатель PyCFunction или способ ее инкапсуляции?

1 Ответ

3 голосов
/ 03 июня 2011

Третий PyObject* - это кварги.Напишите обертку, которая просто ... не пропустит их.Повышение TypeError, если оно содержит что-либо, необязательно.

...