【问题标题】:how to rename keyword argument of constructor by boost::python如何通过 boost::python 重命名构造函数的关键字参数
【发布时间】:2020-04-01 04:17:42
【问题描述】:

我有一个 C++ 类,例如:

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

我想用下面的关键字参数在 python 中调用它:

foo = Foo(arg1 = 1)

foo = Foo(arg2 = 5)

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

【问题讨论】:

标签: python c++ boost boost-python


【解决方案1】:

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

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 等文档生成器,这很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多