十三、Python基础学习-封装

十三、Python基础学习-封装
最新回答
玻璃回忆

2026-03-17 02:06:12

封装是面向对象编程的核心特性之一,其核心在于隐藏对象内部实现细节,仅暴露必要的接口供外部使用。 以下是关于Python封装的详细解析:

一、封装的核心概念
  1. 隐藏属性/方法通过双下划线 __ 开头定义隐藏属性或方法,外部无法直接访问,但可通过特定方式间接调用。

    class Person: __age = 28 # 隐藏属性 def __secret(self): # 隐藏方法 print("这是隐藏方法")
  2. 私有属性/方法单下划线 _ 开头的属性/方法为“私有”,外部可访问但不推荐,子类可继承,但导入时会被忽略(from module import *)。

    class Person: _sex = '男' # 私有属性 def _private_method(self): # 私有方法 print("私有方法")
二、隐藏属性的访问方式
  1. 直接访问(报错)外部直接访问 __age 会触发 AttributeError。

    pe = Person()print(pe.__age) # 报错
  2. 间接访问(合法但非推荐)Python会重命名隐藏属性为 _类名__属性名,可通过此方式访问(但破坏封装性)。

    print(pe._Person__age) # 输出: 28
  3. 通过类内部方法访问(推荐)在类的方法中操作隐藏属性,保持封装性。

    class Person: __age = 28 def show_age(self): print(f"年龄是: {self.__age}")pe = Person()pe.show_age() # 输出: 年龄是: 28
三、隐藏方法的调用

隐藏方法需通过类内部调用,或通过重命名方式(不推荐)。

class Man: def __play(self): print("玩手机") def call_play(self): self.__play() # 内部调用ma = Man()ma.call_play() # 输出: 玩手机ma._Man__play() # 不推荐,但可行四、私有属性/方法的使用场景
  1. 避免命名冲突单下划线 _ 常用于避免与Python关键字冲突(如 _class)。

  2. 模块导入控制from module import * 不会导入单下划线开头的属性/方法。

  3. 子类继承子类可继承父类的单下划线属性/方法,但双下划线属性不会继承。

五、封装的优势
  1. 安全性防止外部随意修改内部数据(如 __age 无法直接修改)。
  2. 可维护性内部实现变更不影响外部调用(如将 __age 改为通过方法计算)。
  3. 简化接口外部只需调用公开方法(如 show_age()),无需关心细节。
六、完整示例class BankAccount: def __init__(self, balance): self.__balance = balance # 隐藏属性 def deposit(self, amount): if amount > 0: self.__balance += amount def get_balance(self): return self.__balance # 通过方法暴露数据account = BankAccount(1000)account.deposit(500)print(account.get_balance()) # 输出: 1500print(account.__balance) # 报错: 无法直接访问总结
  • 双下划线 __:严格隐藏,外部需通过 _类名__属性名 访问(不推荐)。
  • 单下划线 _:弱私有,外部可访问但应避免,子类可继承。
  • 推荐做法:通过公开方法操作隐藏属性/方法,保持封装性。

封装的核心是控制访问权限,而非完全禁止访问。合理使用可提升代码的安全性和可维护性。