Python 私有函数机制与命名约定详解

林见深
林见深
发布时间:2026-10-13| 2人浏览过
原创

本文详解 Python 中私有函数的实现机制。与多数语言不同,Python 通过双下划线前缀(__name)定义私有方法、属性及类方法,而非访问修饰符。文章解析了私有方法的访问限制、名称修饰原理(如 _ClassName__method),并强调专用方法(dunder methods)的命名规范,帮助开发者正确使用 Python 的封装特性。

Python 私有函数的实例详解

与大多数编程语言类似,Python 也提供了私有的概念:

• 私有函数不可从定义它的模块外部调用 • 私有类方法不可从定义它的类外部调用 • 私有属性不可从定义它的类外部访问

然而,与许多其他语言不同,Python 中一个函数、方法或属性是私有还是公有,完全取决于其命名方式。

若一个 Python 函数、类方法或属性的名称以两个下划线开头(但不以两个下划线结尾),则该成员被视为私有;其余所有情况均视为公有。

Python 不存在“受保护”(protected)类方法的概念(即仅限自身类和子类访问)。类方法要么私有(仅限自身类使用),要么公有(任何地方均可使用)。

在 MP3FileInfo 类中,包含两个方法:__parse 和 __setitem__。如前所述,__setitem__ 是一个专有方法(dunder method);通常不直接调用它,而是通过字典语法访问类实例来间接调用,但它属于公有成员。若有充分理由,甚至可以从 fileinfo 模块外部直接调用它。相比之下,__parse 是私有方法,因为其名称前带有两个下划线。

Note: Method Naming C onventions

在 Python 中,所有专用方法(如 __setitem__)和内置属性(如 __doc__)均遵循标准命名约定:名称首尾均包含两个下划线。请勿对自定义的方法或属性采用此类命名方式,否则最终会导致你自己(或其他开发者)产生混淆。

1. 尝试调用一个私有方法

>>> import fileinfo 
>>> m = fileinfo.MP3FileInfo() 
>>> m.__parse("/music/_singles/kairo.mp3") (1) 
Traceback (innermost last): 
 File "<interactive input>", line 1, in ? 
AttributeError: 'MP3FileInfo' instance has no attribute '__parse' 

(1) 若尝试调用私有方法,Python 将抛出一个具有误导性的异常,提示该方法不存在。实际上该方法确实存在,但因其为私有,故在类外部不可直接访问。严格来说,私有方法在类外部仍可访问,只是访问方式较为隐蔽。在 Python 中不存在绝对私有的概念;内部机制会对私有方法和属性的名称进行重命名(name mangling)和恢复,使得按原名称无法直接调用。你可以通过 _MP3FileInfo__parse 这一变形后的名称来访问 MP3FileInfo 类的 __parse 方法。了解这一机制虽有趣,但务必确保不在正式代码中使用此方式。

私有方法之所以设为私有,往往出于特定设计原因;但如同 Python 中的许多其他特性一样,其私有化更多是一种约定俗成的习惯,而非强制性的语言约束。

希望通过本文大家能够理解掌握Python 私有函数的使用,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。