微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决创建 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 举报,一经查实,本站将立刻删除。