You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pybind11中暴露C++类的重载构造函数给Python?

解决pybind11中C++重载构造函数的Python绑定问题

可以直接结合py::overload_cast与py::init实现需求,修改后的pybind11绑定代码如下:

PYBIND11_MODULE(ex_module, module_handle){
    module_handle.doc() = "ex class";

    py::class_<MyClass>(module_handle, "PyEx")
        .def(py::init(py::overload_cast<>(&MyClass::MyClass)))
        .def(py::init(py::overload_cast<const std::string&>(&MyClass::MyClass)))
        ;
}

代码说明

  • py::overload_cast<>(&MyClass::MyClass) 明确指定绑定无参构造函数,模板参数留空表示无参数。
  • py::overload_cast<const std::string&>(&MyClass::MyClass) 指定绑定带const std::string&参数的构造函数,用const引用是更高效的写法,直接写std::string作为模板参数也能达到同样效果。

Python端验证

重新编译模块后,在Python中即可正常使用两种实例化方式:

import ex_module
# 调用无参构造函数
obj_empty = ex_module.PyEx()
# 调用带字符串参数的构造函数
obj_named = ex_module.PyEx("blah")

之前调用带参构造未生效,本质是因为没有绑定对应的构造函数,Python端实际还是调用了无参构造版本,绑定上述代码后即可解决该问题。

内容的提问来源于stack exchange,提问作者sodiumnitrate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 10:05:02