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

如何为pybind11暴露的C++ Value类实例添加动态属性?

解决pybind11暴露的C++类无法添加动态属性的问题

pybind11默认生成的Python绑定类不支持动态添加运行时属性,这是因为默认配置下没有启用动态属性存储机制,直接赋值新属性会触发AttributeError。

解决方案

在定义py::class_时添加py::dynamic_attr()参数,开启动态属性支持:

修改后的绑定代码如下:

py::class_<Value>(m, "Value", py::dynamic_attr())
    .def(pybind11::init<>())
    .def_readwrite("a", &Value::a)
    .def_readwrite("b", &Value::b);

原理说明

py::dynamic_attr()会让pybind11为生成的Python类实例附加一个内部字典,专门用来存储运行时添加的额外属性。修改后,你就可以在Python中正常执行val.c = 30这类动态属性赋值操作了。

如果需要对属性添加逻辑做自定义控制,还可以额外绑定__setattr__和__getattr__方法,但py::dynamic_attr()是解决该问题最直接简便的方式。

内容的提问来源于stack exchange,提问作者Johann cohen-tanugi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:17:04