如何通过 boost::python 重命名构造函数的关键字参数

how to rename keyword argument of constructor by boost::python

我有一个 C++ class 比如:

class Foo {
 public:
  Foo(int param1 = 0, int param2 = 1);
}

我想在 python 中使用关键字参数调用它,如下所示:

foo = Foo(arg1 = 1)

foo = Foo(arg2 = 5)

我不知道如何通过 boost::python 重命名构造函数中的参数,有人可以帮助我吗? 提前谢谢你

要使用自定义名称和自定义默认值定义构造函数的 Python 签名,您可以按如下方式导出 class:

boost::python::class_<Foo>(
    "Foo",
    boost::python::init<int, int>(
        (boost::python::arg("self"), boost::python::arg("arg1")=0, boost::python::arg("arg2")=1)
    )
);

现在从 Python 开始,您将能够:

foo = Foo() # arg1 is 0, arg2 is 1
foo = Foo(1, 5) # arg1 is 1, arg2 is 5
foo = Foo(1) # arg1 is 1, arg2 is 1
foo = Foo(arg1=1) # arg1 is 1, arg2 is 1
foo = Foo(arg2=5) # arg1 is 0, arg2 is 5

注意:您不必声明 self 参数,但它改进了构造函数的文档字符串:

Foo.__init__( (object)self [, (int)arg1=0 [, (int)arg2=1]]) -> None

如果您使用 Sphinx 等文档生成器,这将很有用