python 封装、property装饰器
python 封装
封装的概念
- 封装:Encapsulation
** 隐藏:属性和实现细节,不允许外部直接访问
** 暴露:公开方法,实现对内部信息的操作和访问
封装的作用
- 限制安全的访问和操作,提高数据安全性
- 可进行数据检查,从而有利于保证对象信息的完整性
封装的实现
隐藏
- 保护属性:_属性名
- 私有属性:__属性名
** 被视作 _类名__属性名
暴露
提供数据访问功能,getter
** 计算属性
** 语法:使用@property装饰器
** 调用:实例.方法名
class Account:
'''账户'''
# 普通属性
bank = 'BBC'
# 保护属性--内部属性
_username = '大话西游Ⅱ'
# 私有属性
__psw = 'a123456'
@property
def password(self):
return self.__psw
print(Account.bank) # 结果是:BBC
print(Account._username) # 波浪线不会报错,只提示不推荐使用 # 结果是:大话西游Ⅱ
# print(Account.__psw)
# 错误提示是:AttributeError: type object 'Account' has no attribute '__psw'
print(Account.__dict__) # 检查类的字典内容
# 访问私有属性
print(Account._Account__psw) # 结果是:a123456
# 实例化对象
aa = Account()
# 访问私有属性
print(aa.password) # 结果是:a123456
提供数据操作功能setter
- 语法:使用@计算属性名.setter装饰器
- 调用:实例.方法名
class Account:
'''账户'''
# 私有属性
__psw = 'a123456'
@property
def password(self):
return self.__psw
@password.setter
def password(self,value):
# 进行校验
if len(value)>=8:
self.__psw = value
else:
print('密码长度不能小于8位!')
# 实例化对象
aa = Account()
print(aa.password)# 结果是:a123456
# 修改私有属性,满足校验条件
aa.password = 'ps123456'
print(aa.password)# 结果是:ps123456
# 修改私有属性,不满足校验条件
aa.password = '123456' # 结果是::密码长度不能小于8位!
print(aa.password)# 结果是:ps123456