2026-03-17 02:06:12
封装是面向对象编程的核心特性之一,其核心在于隐藏对象内部实现细节,仅暴露必要的接口供外部使用。 以下是关于Python封装的详细解析:
一、封装的核心概念隐藏属性/方法通过双下划线 __ 开头定义隐藏属性或方法,外部无法直接访问,但可通过特定方式间接调用。
class Person: __age = 28 # 隐藏属性 def __secret(self): # 隐藏方法 print("这是隐藏方法")私有属性/方法单下划线 _ 开头的属性/方法为“私有”,外部可访问但不推荐,子类可继承,但导入时会被忽略(from module import *)。
class Person: _sex = '男' # 私有属性 def _private_method(self): # 私有方法 print("私有方法")直接访问(报错)外部直接访问 __age 会触发 AttributeError。
pe = Person()print(pe.__age) # 报错间接访问(合法但非推荐)Python会重命名隐藏属性为 _类名__属性名,可通过此方式访问(但破坏封装性)。
print(pe._Person__age) # 输出: 28通过类内部方法访问(推荐)在类的方法中操作隐藏属性,保持封装性。
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() # 不推荐,但可行四、私有属性/方法的使用场景避免命名冲突单下划线 _ 常用于避免与Python关键字冲突(如 _class)。
模块导入控制from module import * 不会导入单下划线开头的属性/方法。
子类继承子类可继承父类的单下划线属性/方法,但双下划线属性不会继承。
封装的核心是控制访问权限,而非完全禁止访问。合理使用可提升代码的安全性和可维护性。