увеличить python аргументы оболочки в doc / help () - PullRequest
0 голосов
/ 31 марта 2020

У меня есть общая библиотека на C ++, и я хочу использовать ее в моей программе Python. Я использую Boost :: Python, чтобы обернуть библиотеку. Я использую Ubuntu 18.04 с python 3.6 и бустом 1.65.1
Например:

int foo(MyObject& p1, int p2);

BOOST_PYTHON_MODULE(pyModule) {
    boost::python::class_<MyObject>("PyMyObject", boost::python::init<>());
    boost::python::def("pyFoo", foo);
}

В python

import pyModule
a = PyMyObject()
res = pyModule.pyFoo(a, 1)

Этот код работает. Но проблема заключается в строке документации и информации, возвращаемой функцией help () python.

Если я сделаю

help(pyModule)

, то получу

1. pyFoo(...)
2.     pyFoo( (object)arg1, (object)arg2) -> int :
3.     
4.         C++ signature :
5.             int foo(MyObject {lvalue}, int);

В строке 1 У меня не было списка параметров, тогда в моем коде Visual Studio или pyCharm он не может дать параметры, которые я должен написать. Например, в пакете opencv, если я напишу cv2.imread(, в этот момент моя IDE сообщит мне, какой аргумент я должен предоставить. С моей оберткой у меня нет никакой информации.

В строке 2: я не знаю почему, но иногда вместо того, чтобы иметь реальный тип аргумента, у меня есть объект. Иногда у меня правильный тип, например, int или float.

Я не знаю, что сделал что-то не так. Что мне нужно с моей оболочкой, так это получить список аргументов, когда я использую IDE, как показано на рисунке ниже, и иметь правильную строку документации в help() Пример подсказки в моем VSCode

РЕДАКТИРОВАТЬ 1: Я нашел эту ссылку для Cython, опция bindings, кажется, пишет правильную сигнатуру функции, вместо fun c (...), мы получаем fun c (a, b), что лучше для python переводчик, чтобы знать, каковы аргументы. Опция привязки Cython Я не нашел ни одной эквивалентной опции в Boost python

С уважением,

...