Вызов из Python Rust с помощью функции kwargs завершается неудачно - PullRequest
0 голосов
/ 03 января 2019

Я изо всех сил пытаюсь заставить kwargs работать.Я понимаю, что так же, как #[args(args="*")] для args, #[args(kwargs="**")] для kwargs.

Однако, когда я упаковываю следующее, используя pyo3-pack и пытаюсь вызвать test1 с любыми аргументами, которые яполучить ошибку MyClass.test1()() takes at most 0 argument (1 given).

Что я делаю не так?

#![feature(custom_attribute)]
#![feature(specialization)]

use pyo3::prelude::*;
use pyo3::types::{PyDict, PyTuple};

#[pyclass]
struct MyClass {}

#[pymethods]
impl MyClass {
    #[staticmethod]
    #[args(kwargs = "**")]
    fn test1(kwargs: Option<&PyDict>) -> PyResult<()> {
        if let Some(kwargs) = kwargs {
            for kwarg in kwargs {
                println!("{:?}", kwarg);
            }
        } else {
            println!("kwargs is none");
        }
        Ok(())
    }

    #[staticmethod]
    #[args(args = "*")]
    fn test2(args: &PyTuple) -> PyResult<()> {
        for arg in args {
            println!("{:?}", arg);
        }
        Ok(())
    }
}


#[pymodule]
fn test123(_py: Python, m: &PyModule) -> PyResult<()> {
    m.add_class::<MyClass>()?;
    Ok(())
}

1 Ответ

0 голосов
/ 03 января 2019

Я почти уверен, что это ошибка в PyO3: эта проверка , кажется, добавляет nkeywords без причины.Подайте заявку GitHub и посмотрите, что говорят сопровождающие.

...