Python中的封装

2025年5月30日 | 阅读 4 分钟

在 Python 中,封装是面向对象编程 (OOP) 的一个基本概念。它将类视为数据(变量)和操作这些数据的方法的集合。

封装阻止直接访问对象的某些组件,从而防止意外的干扰和数据损坏。

Python 中的封装是如何工作的?

封装在 Python 中通过阻止用户直接访问对象的某些部分来实现,同时又通过其他方式(方法)给予他们访问这些部分的能力。

可以使用不同的 访问修饰符 来控制访问。

  • 公共属性:可以从任何地方访问。
  • 受保护的属性 (_singleUnderscore) :不打算公开使用,但仍然可以访问。
  • 私有属性 (__doubleUnderscore):不能从类外部直接访问。
成员类型语法在类内部可访问在子类中可访问在类外部可访问
公共self.var是的是的是的
Protectedself._var是的是 (推荐仅在子类内部访问)是 (不推荐)
私有self.__var是的否 (除非使用名称修饰)否 (禁止直接访问)

Python 中封装的实现

Python 对类成员使用三个级别的访问控制:

  • 公共,
  • 受保护,和
  • 私有。

让我们通过示例来探讨它们。.

公共成员

公共成员可以在任何地方访问,包括类内部、类外部以及派生(子)类内部。

  • 用法:变量名之前没有下划线。

示例

立即执行

输出

Toyota
Corolla
Car: Toyota Corolla

说明

公共属性(brand,model)也可以在类外部访问。display() 方法也是公共的,可以从其他类访问。

受保护的成员

受保护的成员由单个下划线 (_variable) 表示。

  • 用法:可以在类外部访问,但只应在类和子类中访问(不强制执行,仅为约定)。

示例

立即执行

输出

Brand: Tesla, Model: Model S, Engine: Electric
Battery: 100 kWh
Model S

说明

_model 和 _engine 是受保护的属性,_show_details() 是受保护的方法。它们可以在子类中访问,但不建议在类外部直接使用

私有成员

私有成员由双下划线 (__variable) 表示。

  • 用法:它们不能在类外部直接访问

示例

立即执行

输出

123456789
1000
2000
2000

说明

__balance 是一个私有属性不允许直接访问。我们使用getter (get_balance()) 和 setter (set_balance()) 方法控制访问。Python 会在内部将 __balance 重命名为 _BankAccount__balance,允许通过名称修饰进行访问(但这是一种不良做法)。

结论

封装通过防止直接访问来隐藏对象的内部细节和实现。在 Python 中,封装通过类属性的公共、受保护和私有成员以及通过 getter 和 setter 控制访问来实现。由于 Python 中的约定驱动方法,它提高了代码的安全性、可维护性和结构。

Python 封装常见问题解答

1. Python 中的封装是什么?

封装是面向对象编程原则,它禁止无限制地访问对象的數據和方法。通过称为公共方法的受控接口提供访问,确保數據的安全和保护。

2. Python 中的封装是如何实现的?

封装使用访问说明符实现:

  • Self 变量 (self.var):公共成员可以从任何地方访问。受保护的成员用单个下划线 (_var) 表示,表示它可用于内部使用。
  • 双下划线 (__var):称为私有成员,表示不能直接访问它。

3. 封装为什么很重要?

封装提供:

  • 防止意外修改,从而保护数据。
  • 数据只能通过定义的访问方法进行访问,即提供方法控制访问。
  • 提高代码结构和模块化,使其更易于维护。

4. 封装中的 Getter 和 Setter 如何工作?

可以使用setter 和 getter 方法分别访问私有变量。

示例

立即执行

输出

1000
2000

5. Python 中的私有成员可以在类外部访问吗?

禁止直接访问,因此无法使用类属性。但是,我们可以通过名称修饰来访问私有变量 (_ClassName__privateVar)。