首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyO3中的自定义结构向量

PyO3中的自定义结构向量
EN

Stack Overflow用户
提问于 2019-01-16 08:59:34
回答 3查看 1.7K关注 0票数 7

我对Rust和PyO3 (来自Python)还是新手,所以这对更有经验的人来说是显而易见的。

我在PyO3中声明了一个pyclass结构。

代码语言:javascript
复制
#[pyclass]
struct Block {
    start: i32,
    stop: i32,
}

然后,我在一个锈蚀函数中使用Block,该函数接受一个Block向量,并输出一个int向量(以下签名)

代码语言:javascript
复制
#[pyfunction]
fn from_blocks(block_list: Vec<Block>) -> Vec<i32>

当我使用nightly-x86_64-apple-darwin编译时,我得到以下错误:

代码语言:javascript
复制
#[pyfunction]
^^^^^^^^^^^^^ the trait `pyo3::FromPyObject<'_>` is not implemented for `std::vec::Vec<Block>`

我该怎么解决这个问题?

编辑: Caio是对的。我在追溯错误时犯了一个错误。以前我写过

然后,我在一个锈蚀函数中使用块,该函数接受int的向量,并输出块的向量(签名如下)

代码语言:javascript
复制
#[pyfunction]
fn to_blocks(list: Vec<i32>) -> Vec<Block>

但实际的冒犯职能是:

代码语言:javascript
复制
#[pyfunction]
fn from_blocks(block_list: Vec<Block>) -> Vec<i32>

我更新了这个问题,使它更清楚。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-16 13:55:37

FromPyObject用于可以从Python中提取的类型。这就是为什么我认为您试图编写fn to_blocks(list: Vec<Block>) -> Vec<i32>而不是fn to_blocks(list: Vec<i32>) -> Vec<Block>。如果是这样的话,让我们继续讨论实现链。

FromPyObject实现PyTryFrom的any &T的默认实现,PyTryFrom任何实现PyTypeInfo的T的默认实现。[pyclass]根据impl_class方法实现了PyObjectAllocPyObjectWithFreeList,这两个特征都具有PyTypeInfo特征约束。因此,您的类/结构可以很好地处理引用,例如:

代码语言:javascript
复制
#[pyfunction]
fn to_blocks(list: Vec<&Block>) -> Vec<i32>

您可以在正式文档中以总结的方式看到这一解释。

FromPyObject由各种类型实现,这些类型可以从Python 引用中提取。

票数 5
EN

Stack Overflow用户

发布于 2019-01-16 10:00:33

看起来,pyfunction属性生成的代码要求返回类型实现FromPyObject特性。虽然FromPyObject for Vec<T> where T: FromPyObject有一个全面的实现,但是为pyclass属性生成的代码似乎不包括FromPyObject类型的Block实现。

由于我不熟悉PyO3,除了我刚才查看它的API文档来验证这个答案的几分钟外,我不知道如何最好地得到一个FromPyObject实现--也许它有一个derive

票数 0
EN

Stack Overflow用户

发布于 2019-01-16 15:15:30

您使用的是哪个版本的PyO3?您的代码在0.5.30.6.0-alpha.1上适用于我。

由于这个原因,我无法测试这个,但我猜您需要返回一个PyResult

代码语言:javascript
复制
#[pyfunction]
fn to_blocks(list: Vec<i32>) -> PyResult<Vec<Block>>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54213443

复制
相关文章

相似问题

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