Воспроизводимый пример кода
Мой код на С ++ очень прост:
struct A
{
A()
{
this->a = 0;
}
py::int_ a;
};
struct B
{
B() {}
A sa;
};
PYBIND11_MODULE(libdemo_ext, m)
{
py::class_<A>(m, "A", py::dynamic_attr())
.def(py::init<>())
.def_readwrite("a", &A::a);
py::class_<B>(m, "B", py::dynamic_attr())
.def(py::init<>())
.def_readwrite("sa", &B::sa);
}
Когда я использую его в python, как это:
def func(b):
sa = b.sa
sa.pa = 'hello'
b = B()
func(b)
print(b.sa.pa)
и результат:
Traceback (most recent call last):
File "demo.py", line 12, in <module>
print(b.sa.pa)
AttributeError: 'libdemo_ext.A' object has no attribute 'pa'
Но если я использую это так:
def func(b):
sa = b.sa
sa.pa = 'hello'
b = B()
sa = b.sa
func(b)
print(b.sa.pa)
, то все в порядке.
У меня есть класс A с dynamic_attr, а класс B с dynamic_attr и Aобъект. Но я не могу передать динамическую особенность А. Б.