You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为PyO3的#[pymethods]添加对Python不可见的私有方法

在PyO3中实现对Python不可见的隐藏方法

有两种常用方式可以实现Rust类方法对Python不可见,同时支持在Rust内部调用,且允许返回任意Rust原生类型:

方式1:将隐藏方法放在普通impl块中

直接在#[pymethods]注解的impl块之外,定义普通的impl块来存放内部方法,这类方法完全不会暴露给Python:

#[pyclass]
pub struct SomeItem;

// 普通impl块:仅Rust内部可调用,Python不可见
impl SomeItem {
    fn hidden_method(&self) -> u8 {
        0
    }
}

#[pymethods]
impl SomeItem {
    #[new]
    pub fn new() -> Self {
        SomeItem
    }

    pub fn method(&self) -> u8 {
        // 内部调用隐藏方法
        self.hidden_method()
    }
}

方式2:在#[pymethods]块中使用#[pyo3(skip)]属性

如果希望把隐藏方法和暴露给Python的方法放在同一个impl块中,可以给目标方法添加#[pyo3(skip)]属性,标记为跳过向Python暴露:

#[pyclass]
pub struct SomeItem;

#[pymethods]
impl SomeItem {
    #[new]
    pub fn new() -> Self {
        SomeItem
    }

    pub fn method(&self) -> u8 {
        self.hidden_method()
    }

    #[pyo3(skip)] // 标记该方法不暴露给Python
    fn hidden_method(&self) -> u8 {
        0
    }
}

注意:PyO3官方提供的跳过暴露属性是#[pyo3(skip)],而非示例中的#[pyo3(ignore)],使用前者才能达到预期效果。

内容的提问来源于stack exchange,提问作者Vladimir Alinsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:17:27