提问人:Phil-ZXX 提问时间:3/14/2022 更新时间:7/13/2022 访问量:705
Pybind11 模块中的函数签名/接口(IDE 建议)
Function Signatures/Interfaces from Pybind11 Module (IDE Suggestions)
问:
假设我们有一个简单的模块,称为使用 pybind11 构建:_sample
/* py_bindings.cpp */
#include <pybind11/pybind11.h>
namespace py = pybind11;
PYBIND11_MODULE(_sample, m) {
m.def("add", [](int a, int b) { return a + b; });
m.def("add", [](const std::string& lhs, const std::string& rhs) { return lhs + rhs; });
}
这将生成一个动态模块文件 (Windows) 或 (Linux),然后我们可以将其导入到实际模块中:_sample.pyd
_sample.so
sample
## sample\__init__.py ##
from ._sample import *
这样我们就可以写:
## script.py ##
import sample as s
print(s.add(4, 2)) # 6
print(s.add('AB', 'C')) # ABC
上面的代码工作正常,但是在代码实际运行之前,IDE 不知道包含哪些函数。因此,根本没有函数建议(也没有函数签名建议)。_sample
由于我想帮助我的库的用户,我的问题是:如何在我的模块中包含函数建议(或“函数提示”)?
我尝试将以下代码包含在其中,因为我认为它们可以用作“提示”。但不幸的是,这覆盖了 中的原始函数。sample\__init__.py
...
add
_sample
def add(arg0: int, arg1: int) -> int:
...
有没有办法将函数签名提示给 Python IDE?
当然,我也想将其扩展到类、类函数和模块属性。我只是选择了函数作为起点。
答:
1赞
Erayo
7/13/2022
#1
我认为您要查找的是存根或接口(pyi)文件。IDE 可以从此文件中理解函数和类的签名。 如果您使用的是 pybind11,请查看 pybind11-stubgen 以自动生成存根文件。
评论