【Python】私有属性"单下划线" 和 "双下划线"

一、单下划线 _attr(受保护,弱私有)

  • 写法:self._password
  • 含义:约定内部使用,外部别碰;语法不拦截,仍可访问。
  • 示例:
class User:
    def __init__(self):
        self._pwd = "123"  # 受保护属性

u = User()
print(u._pwd)  # 能输出 123(不推荐这样写)

二、双下划线 __attr(私有,名称改写)

  • 写法:self.__password
  • 原理:触发 名称改写(name mangling) ,变成 _类名__attr,外部不能直接访问
  • 示例:
class User:
    def __init__(self):
        self.__pwd = "123"  # 私有属性

u = User()
print(u.__pwd)   # 报错:AttributeError
print(u._User__pwd)  # 可强制访问(不推荐)

三、对比(最常用)

写法 名称 访问限制 外部直接访问
attr 公有
_attr 受保护 约定不访问 ✅(不推荐)
__attr 私有 名称改写 ❌(需强制)

四、最佳实践

  1. 普通内部属性:用 单下划线 _ (PEP8 推荐)。
  2. 避免子类覆盖:用 双下划线 __
  3. 控制读写:用 @property 封装,安全又优雅:
class User:
    def __init__(self):
        self.__pwd = "123"

    @property
    def pwd(self):
        return self.__pwd  # 只读

u = User()
print(u.pwd)  # 123
u.pwd = "456"  # 报错:无法修改
posted @ 2026-05-12 15:50  静心笃行。  阅读(2)  评论(0)    收藏  举报