创建 Python 类时,如何在 Rust 中使用 pyo3 创建析构函数方法?

问题描述

我在 Rust 中使用 pyo3 创建一个 Python 模块。 我可以创建一个类和一个构造函数

    #[pyclass]
    struct MyClass {
        i: u8,}

    #[pymethods]
    impl MyClass {
        #[new]
        fn new() -> PyResult<Self> {
            println!("Instance Constructed!");
            Ok(MyClass { i: 0 })
        }

        // Doesn't work
        fn __del__(&mut self) {
            println!("Instance destroyed");
        }
    }

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

当我编译它,并使用我的 Python 类时,我可以看到我的实例有一个 __del__ 方法,我可以手动调用它,但是当实例被销毁时 Python 不会调用它:

>>> from myclass import MyClass
>>> inst = MyClass()
Instance Constructed!
>>> inst.__del__
<built-in method __del__ of builtins.MyClass object at 0x766ca4c0>
>>> inst.__del__()
Instance destroyed
>>> del(inst)
>>>

有没有一种特殊的方法可以使用 pyo3 在 Rust 中创建析构函数? 为什么 Python 不会调用 __del__?当您 del 实例时,为纯 Python 中定义的类调用它似乎没有问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)