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

如何在pybind11中从C++调用Python类的方法?

关于pybind11调用Python类方法的标准实现方式

你的实现思路方向是对的,但存在一个关键细节问题:Python的实例方法依赖于实例本身(即self参数),直接通过attr获取方法后调用时,需要显式传入实例作为第一个参数,否则会抛出TypeError。

正确的实现方式有两种:

  1. 修正原有代码,显式传入实例参数:
void callPy(py::object f) {
    py::object mycallback = f.attr("do_something");
    mycallback(f, "test"); // 传入实例f作为self参数
}
  1. 使用pybind11提供的py::call_method工具函数(更推荐的标准写法):
void callPy(py::object f) {
    py::call_method<void>(f, "do_something", "test");
}

这个函数会自动处理实例方法与实例的绑定,无需手动传入self,是pybind11中调用Python类实例方法的标准方式。

另外,也可以用更简洁的链式调用写法,效果和第一种修正后的代码一致:

void callPy(py::object f) {
    f.attr("do_something")("test");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:14:55