跳到主要内容

访问控制(Access Control)

🧩 为什么需要访问控制?

在实际开发中,我们希望类中的某些属性或方法:

  • 只能在类的内部使用(保护隐私)
  • 防止外部代码直接修改内部状态(封装数据)

这就需要访问控制机制来限定“谁可以访问哪些成员”。


🔓 Python 中的三种访问级别:

Python 没有像 C++ 或 Java 中那样的 publicprivateprotected 关键字,而是通过 命名约定 来实现:

前缀方式含义说明
无前缀公有成员,可在类内外访问
_名称受保护成员,建议仅类及子类访问
__名称私有成员,类外无法直接访问(名称重整)

示例 1:公有成员

人员:
初始化(自身, 姓名):
自身.姓名 = 姓名

人员1 = 人员("小明")
打印(人员1.姓名)

示例 2:受保护成员(单下划线)

人员:
初始化(自身, 姓名):
自身._姓名 = 姓名

人员1 = 人员("小明")
打印(1._姓名)

示例 3:私有成员(双下划线)

人员:
初始化(自身, 姓名):
自身.__姓名 = 姓名

人员1 = 人员("小明")
# 打印(人员1.__姓名) # 会报错:属性不可访问

🔓 可以通过类名强制访问(不推荐):

打印(人员1._人员__姓名)

✅ 访问控制的设计建议:

  • 公有成员:对外开放的接口和属性
  • 受保护成员:建议用于类内部或子类访问(不对外)
  • 私有成员:重要状态或内部逻辑,避免外部访问

💡 小结

  • Python 的访问控制是“约定式”的,靠命名而非关键字
  • 使用单/双下划线可以控制成员对外部的可见性
  • 恰当的封装有助于类的稳定性、安全性与扩展性