python - 在创建 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 中定义的类调用它似乎没有问题。
解决方案
推荐阅读
- python - 在 Python 中的 virtualenv 中安装 statsmodels 时出现 PermissionError
- java - Java mqtt 并发连接需要时间
- google-chrome - 有什么办法可以禁用谷歌 Chrome 浏览器的同源策略?
- javascript - JavaScript 启动的 IE Window 意外处于 kiosk 模式
- oracle - 如何重用流水线表函数的结果作为另一个函数的参数?
- c - 需要一些关于 OB_CALLBACK_REGISTRATION 的解释
- javascript - 无法访问发布请求中的数据。表达
- android - 更改可绘制按钮颜色后,我的笔划消失了,我无法再次设置笔划
- python - 通过python中的子进程使文件可执行
- discord.js - 我将如何实现一个字段来计算用户在 RichEmbed 中发送的消息量?