






















在Python中,单下划线(_)和双下划线(__)开头的命名,核心区别在于:单下划线是一种“约定”,而双下划线是一种“机制”。
前者是给程序员看的提示,后者是Python解释器会实际执行的规则。
_var:一种“内部使用”的约定这是一种广泛遵守的编码规范,由PEP 8定义。它主要起提示作用,解释器本身不会强制执行任何访问限制。
from module import * 时,以单下划线开头的名称不会被导入。__var:一种“名称修饰”的机制这并非用于实现“私有”属性,而是Python解释器执行的一种“名称修饰”(Name Mangling)技术。
_ClassName__var。obj.__var 访问,但可以通过 obj._ClassName__var 访问到。这也证明了它并非真正的私有。__var__这是Python官方预留的“特殊方法”或“魔法方法”命名模式。例如__init__(构造函数)、__str__等。请绝对不要在自己的代码中创造这种名字,它仅供Python内部使用。
| 特性 | 单下划线 (_var) |
双下划线 (__var) |
|---|---|---|
| 本质 | 编码约定 (Convention) | 名称修饰机制 (Name Mangling) |
| 主要目的 | 提示“内部使用”,不建议外部访问 | 防止子类意外覆盖,避免命名冲突 |
| 访问控制 | 无,解释器不强制执行 | 有,名称被改写,需通过修饰名访问 |
| 继承行为 | 子类可以轻松覆盖 | 子类中同名属性会被修饰为不同名称,互不干扰 |
| 导入行为 | from module import * 时不会被导入 |
无特殊影响 |
| 推荐程度 | 推荐,用于标识内部实现 | 谨慎使用,仅在防止子类覆盖时考虑 |
Python的哲学是“我们大家都是成年人”。它相信程序员会自觉遵守约定,而不是通过强制的语法来限制。
_var 是更普遍和推荐的做法。__var。理解并遵循这些约定,是写出地道、专业且易于维护的Python代码的重要一步。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。