2

Rust でPyIterProtocolを実装する方法の例を見つけました。

use pyo3::prelude::*;
use pyo3::PyIterProtocol;
use pyo3::class::iter::IterNextOutput;

#[pyclass]
struct Iter {
    count: usize
}

#[pyproto]
impl PyIterProtocol for Iter {
    fn __next__(mut slf: PyRefMut<Self>) -> IterNextOutput<usize, &'static str> {
        if slf.count < 5 {
            slf.count += 1;
            IterNextOutput::Yield(slf.count)
        } else {
            IterNextOutput::Return("Ended")
        }
    }
}

しかし、反復可能であるがイテレータ自体ではないコンテナクラスを実装する方法がわかりません。基本的に、Python でオブジェクトを次のように分解できるようにしたい

x, y, z = my_object
4

1 に答える 1