首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyO3将rust结构转换为PyObject

PyO3将rust结构转换为PyObject
EN

Stack Overflow用户
提问于 2021-06-23 23:17:35
回答 1查看 127关注 0票数 1

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

代码语言:javascript
复制
#[pyclass]
pub struct A {
    ...
}

现在我有了表单的一个函数

代码语言:javascript
复制
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吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-23 23:38:04

如果您拥有函数签名的权限,只需将其更改为fn f(slf: Py<Self>) -> A即可

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

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

标记为#[pyclass]的结构将实现IntoPy<PyObject>,但转换方法不是称为to_object,而是into_py,并且它需要一个gil令牌。下面是你要做的:

代码语言:javascript
复制
fn f(slf: Py<Self>) -> PyObject {
  //... some code here
  let gil = Python::acquire_gil()?;
  let py = gil.python();
  output.into_py(py)
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68102645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档