访问控制(Access Control)
🧩 为什么需要访问控制?
在实际开发中, 我们希望类中的某些属性或方法:
- 只能在类的内部使用(保护隐私)
- 防止外部代码直接修改内部状态(封装数据)
这就需要访问控制机制来限定“谁可以访问哪些成员”。
🔓 Python 中的三种访问级别:
Python 没有像 C++ 或 Java 中那样的 public、private、protected 关键字,而是通过 命名约定 来实现:
| 前缀方式 | 含义说明 |
|---|---|
| 无前缀 | 公有成员,可在类内外访问 |
_名称 | 受保护成员,建议仅类及子类访问 |
__名称 | 私有成员,类外无法直接访问(名称重整) |
示例 1:公有成员
类 人员:
定 初始化(自身, 姓名):
自身.姓名 = 姓名
人员1 = 人员("小明")
打印(人员1.姓名)
示例 2:受保护成员(单下划线)
类 人员:
定 初始化(自身, 姓名):
自身._姓名 = 姓名
人员1 = 人员("小明")
打印(人1._姓名)
示例 3:私有成员(双下划线)
类 人员:
定 初始化(自身, 姓名):
自身.__姓名 = 姓名
人员1 = 人 员("小明")
# 打印(人员1.__姓名) # 会报错:属性不可访问
🔓 可以通过类名强制访问(不推荐):
打印(人员1._人员__姓名)
✅ 访问控制的设计建议:
- 公有成员:对外开放的接口和属性
- 受保护成员:建议用于类内部或子类访问(不对外)
- 私有成员:重要状态或内部逻辑,避免外部访问
💡 小结
- Python 的访问控制是“约定式”的,靠命名而非关键字
- 使用单/双下划线可以控制成员对外部的可见性
- 恰当的封装有助于类的稳定性、安全性与扩展性