考虑一个通过 pyo3 暴露给 python 的简单 rust 类
use pyo3::prelude::*;
#[pyclass(name=MyClass)]
pub struct PyMyClass {
// Some fields
}
#[pymethods]
impl PyMyStruct {
#[new]
fn py_new(obj: PyRawObject) {
obj.init({
PyMyStruct {
// ...
}
});
}
}
现在有一个函数应该以这种方式用python中的两个这样的结构调用:
a = MyStruct()
b = MyStruct()
c = foo(a,b)
因此一个定义
#[pyfunction]
fn foo(a: PyMyStruct, b: PyMyStruct) -> PyResult<PyMyStruct> {
// some high performance logic implemented in rust ...
}
现在编译器声称PyMyStruct
应该实现 trait FromPyObject
:
impl FromPyObject<'_> for PyMyStruct {
fn extract(ob: &'_ PyAny) ->PyResult<Self> {
// I dont know what to do here :(
}
}
但我不知道如何PyMyStruct
从PyAny
...检索实例、指针或其他任何东西。有人可以帮我吗?