gpt4 book ai didi

python - PyO3 将 rust 结构转换为 PyObject

转载 作者:行者123 更新时间:2023-12-03 08:20:05 25 4
gpt4 key购买 nike

我有一个用 #[pyclass] 注释的简单类

#[pyclass]
pub struct A {
...
}

现在我有一个如下形式的函数

fn f(slf: Py<Self>) -> PyObject{
//... some code here
let output = A{...};
output.to_object() // Error: method `to_object` not found for this
}

我应该用一些东西注释我的结构以使其派生pyo3::ToPyObject吗?

最佳答案

如果您有权控制函数签名,则可以将其更改为 fn f(slf: Py<Self>) -> A

只要有可能,我更喜欢这种方法,因为这样转换就发生在幕后。

如果您需要保持签名通用,因为您可能返回不同类型的结构,则需要调用正确的转换方法。

标有 #[pyclass] 的结构将有IntoPy<PyObject>已实现,但未调用转换方法 to_object而是into_py ,并且它想要一个 gil 代币。所以这就是你要做的:

fn f(slf: Py<Self>) -> PyObject {
//... some code here
let gil = Python::acquire_gil()?;
let py = gil.python();
output.into_py(py)
}

关于python - PyO3 将 rust 结构转换为 PyObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68102645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com