S-JIS[2025-12-14]

pyo3 PyAny型

Rustpyo3のPyAnyのメモ。

 

概要

PyAnyは、pyo3でPythonのオブジェクトを表す型。

use pyo3::types::PyAny;

型を判定する例

PyAnyがPythonで具体的にどんな型だったのかは、is_instance_ofメソッドで判定できる。

use pyo3::{prelude::*, types::*};
#[pyfunction]
fn my_type(value: Bound<PyAny>) -> PyResult<&str> {
    let r = if value.is_instance_of::<PyString>() {
        "PyString"
    } else if value.is_instance_of::<PyInt>() {
        "PyInt"
    } else if value.is_instance_of::<PyFloat>() {
        "PyFloat"
    } else {
        "unknown-type"
    };

    Ok(r)
}

型を変換する例

PyAnyから具体的な型へは、extractメソッドで変換できる。

use pyo3::{prelude::*, types::*};
#[pyfunction]
fn my_extract(value: Bound<PyAny>) -> PyResult<String> {
    let r = if value.is_instance_of::<PyString>() {
        let value: &str = value.extract()?;
        format!("PyString: {}", value)
    } else if value.is_instance_of::<PyInt>() {
        let value: i64 = value.extract()?;
        format!("PyInt: {}", value)
    } else if value.is_instance_of::<PyFloat>() {
        let value: f64 = value.extract()?;
        format!("PyFloat: {}", value)
    } else {
        "unknown-type".to_string()
    };

    Ok(r)
}

pyo3へ戻る / Rustへ戻る / 技術メモへ戻る
メールの送信先:ひしだま