Python通过双下划线触发名称改写实现私有成员,如__age被改为_Person__age,防止意外访问,但非绝对禁止;单下划线表示受保护,双下划线主要用于避免继承冲突,体现“约定优于强制”的设计哲学。

在Python中,私有成员并不是通过严格的访问控制来实现的,而是依靠一种命名约定和名称改写(name mangling)机制来达到“私有”的效果。理解这一点,关键在于明白Python的设计哲学:它更信任程序员,而不是强制限制。
什么是私有成员?
在类中,我们希望某些属性或方法只在类内部使用,不被外部直接访问,这些就被称为“私有成员”。Python没有像Java那样的 private 关键字,但提供了以下方式来表达这种意图:
• 以双下划线开头(如 __var、__method())的变量或方法被视为私有• 这些成员会被Python解释器进行名称改写,防止被意外访问
例如:
class Person:
def __init__(self):
self.__age = 20 # 私有属性
def __show_age(self): # 私有方法
print(self.__age)
def get_age(self):
return self.__age
立即学习“Python免费学习笔记(深入)”;
在这个例子中,__age 和 __show_age 都是私有成员。
名称改写是如何工作的?
Python会把以双下划线开头的成员名自动重命名为 _类名__变量名 的形式。这可以防止外部直接通过原名访问,但并非完全不可访问。
通吃客零食网整站 for Shopex
第一步】:将安装包中所有的文件夹和文件用ftp工具以二进制方式上传至服务器空间;(如果您不知如何设置ftp工具的二进制方式,可以查看:(http://www.shopex.cn/support/qa/setup.help.717.html)【第二步】:在浏览器中输入 http://您的商店域名/install 进行安装界面进行安装即可。【第二步】:登录后台,工具箱里恢复数据管理后台是url/sho
下载
继续上面的例子:
p = Person()
# p.__age # 报错:AttributeError
print(p._Person__age) # 可以访问:输出 20
虽然技术上能绕过,但这违背了封装原则。这种机制的目的不是“绝对禁止”,而是“明确提示:这是内部实现,请勿直接使用”。
单下划线 vs 双下划线
• 单下划线 _var:表示“受保护”,建议不要直接访问,但不会改写名称
• 双下划线 __var:触发名称改写,用于避免子类命名冲突,也增强私密性
• 双下划线主要用于避免继承时的名字冲突,而不仅仅是隐私比如在继承中:
class A:
def __init__(self):
self.__x = 1
class B(A):
def init(self):
super().init()
self.x = 2 # 不会覆盖A的x,因为名字实际不同
A中的 __x 变成 _A__x,B中的变成 _B__x,互不干扰。
总结
Python的私有本质上是一种“礼貌的约定”+“名称改写”机制。它不阻止你做不该做的事,但告诉你:“这是内部细节,别随便碰”。真正的封装依赖于开发者的自律和团队规范。
基本上就这些,不复杂但容易忽略。










