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

如何在Pybind11/Nanobind中返回C++类对象并在Python调用其方法

如何在Pybind11/Nanobind/Boost.Python中实现C++类方法返回另一个类对象并在Python中调用其方法

需求概述

需要实现:C++中类B的bar()方法返回类A的对象,在Python中调用该返回对象的foo()方法。以下是三种主流绑定框架的实现方案,均无需使用lambda表达式。


Pybind11 实现

C++绑定代码

#include <pybind11/pybind11.h>
#include <pybind11/print.h>

namespace py = pybind11;

class A {
public:
    void foo() {
        py::print("Hello world");
    }
};

class B {
public:
    A bar() {
        A a;
        return a; // 直接返回栈上的A对象即可
    }
};

PYBIND11_MODULE(example, m) {
    // 绑定类A
    py::class_<A>(m, "A")
        .def(py::init<>())
        .def("foo", &A::foo);

    // 绑定类B,无需lambda,直接绑定bar方法
    py::class_<B>(m, "B")
        .def(py::init<>())
        .def("bar", &B::bar);
}

Python调用代码

import example

b_object = example.B()
a = b_object.bar()
a.foo()  # 输出: Hello world

Nanobind 实现

Nanobind语法与Pybind11高度相似,实现逻辑一致:

C++绑定代码

#include <nanobind/nanobind.h>
#include <nanobind/print.h>

namespace nb = nanobind;

class A {
public:
    void foo() {
        nb::print("Hello world");
    }
};

class B {
public:
    A bar() {
        A a;
        return a;
    }
};

NB_MODULE(example, m) {
    nb::class_<A>(m, "A")
        .def(nb::init<>())
        .def("foo", &A::foo);

    nb::class_<B>(m, "B")
        .def(nb::init<>())
        .def("bar", &B::bar);
}

Python调用代码

import example

b_object = example.B()
a = b_object.bar()
a.foo()  # 输出: Hello world

Boost.Python 实现

C++绑定代码

#include <boost/python.hpp>
#include <iostream>

namespace bp = boost::python;

class A {
public:
    void foo() {
        std::cout << "Hello world" << std::endl;
    }
};

class B {
public:
    A bar() {
        A a;
        return a;
    }
};

BOOST_PYTHON_MODULE(example) {
    bp::class_<A>("A")
        .def(bp::init<>())
        .def("foo", &A::foo);

    bp::class_<B>("B")
        .def(bp::init<>())
        .def("bar", &B::bar);
}

Python调用代码

import example

b_object = example.B()
a = b_object.bar()
a.foo()  # 输出: Hello world

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:42:56