Python 测开27期 - WL - 学习笔记 - python 封装、property装饰器

python 封装、property装饰器

python 封装

封装的概念

  • 封装:Encapsulation
    ** 隐藏:属性和实现细节,不允许外部直接访问
    ** 暴露:公开方法,实现对内部信息的操作和访问

封装的作用

  • 限制安全的访问和操作,提高数据安全性
  • 可进行数据检查,从而有利于保证对象信息的完整性

封装的实现

隐藏

暴露

提供数据访问功能,getter

** 计算属性
** 语法:使用@property装饰器
** 调用:实例.方法名
image

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装饰器
  • 调用:实例.方法名
    image
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