Python封装的概念与实现
一、封装的核心概念
封装是面向对象编程的三大特性之一(封装、继承、多态),其核心包含两个层面:
-
数据隐藏
将对象的内部状态(属性)和实现细节隐藏,仅暴露必要的访问接口。
数学表示:设对象状态为 SSS,对外接口为 III,则 I=f(S)I = f(S)I=f(S) -
行为绑定
将操作数据的方法与数据本身绑定在同一个逻辑单元(类)中,形成自包含实体。
二、Python的封装实现机制
1. 访问控制(命名约定)
- 公有成员:直接定义(如
self.value) - 受保护成员:单下划线前缀(如
self._value) - 私有成员:双下划线前缀(如
self.__value)
私有成员通过名称修饰(Name Mangling)实现:
私有变量名→_ClassName__variableName \text{私有变量名} \rightarrow \_ClassName\_\_variableName 私有变量名→_ClassName__variableName
2. 属性控制器(Property)
使用 @property 装饰器实现安全的属性访问:
class Temperature:
def __init__(self):
self.__celsius = 0 # 私有属性
@property
def celsius(self): # Getter
return self.__celsius
@celsius.setter
def celsius(self, value): # Setter
if value < -273.15:
raise ValueError(绝对零度不可达.__celsius = value
三、完整封装示例
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner # 公有属性
self.__balance = balance # 私有属性
def deposit(self, amount):
行为 amount <= 0:
raise ValueError(必须为正\n self.__balance = amount
def withdraw(self, amount):
封装取款行为\n if amount > self.__balance:
raise ValueError(不足\n self.__balance -= amount
@property
def balance(self): # 只读接口
return self.__balance
# 使用示例
account = BankAccount(\0)
account.deposit(500)
account.withdraw(200)
print(faccount.owner}的余额: {account.balance}元 输出: 张三的余额: 1300元
四、封装的优势
- 安全性:防止外部直接修改敏感数据(如
__balance) - 易维护:内部实现变更不影响外部调用(如修改余额计算逻辑)
- 接口清晰:通过方法明确操作边界(如
deposit()/withdraw()) - 数据校验:可在方法中添加业务规则(如取款金额校验)
最佳实践:优先通过方法操作属性,避免直接暴露数据成员;对需要外部访问的属性使用property控制访问权限。
1558

被折叠的 条评论
为什么被折叠?



