封装的概念
-
封装(
Encapsulation
)- 隐藏:属性和实现细节,不允许外部直接访问
- 暴露:公开方法,实现对内部信息的操作和访问
封装的作用
- 限制安全的访问和操作,提高数据安全性
- 可进行数据检查,从而有利于保证对象信息的完整性
封装的实现:隐藏
-
保护属性:
_属性名
-
私有属性:
__属性名
- 被视作
_类名__属性名
- 被视作
class Account:# 普通属性bank = "BOC"# 内部属性_username = "Hogwarts"# 私有属性__password = "888"# 通过类名访问类属性
print(Account.bank) # 将会打印 BOC
print(Account._username) # 将会打印 Hogwarts
print(Account.__password) # 将会引发 AttributeErrorprint(Account.__dict__)# 实例化
obj = Account()# 实例访问类属性
print(obj.bank) # 将会打印 BOC
print(obj._username) # 将会打印 Hogwarts
print(obj.__username) # 将会引发AttributeError
封装的实现:暴露
-
提供数据访问功能(
getter
)- 计算属性
- 语法:使用
@property
装饰器 - 调用:
实例.方法名
class Account:# 普通属性bank = "BOC"# 内部属性_username = "Hogwarts"# 私有属性__password = "888"@propertydef password(self):return self.__password# 实例化对象
obj = Account()# 访问实例的私有属性
print(obj.password) # 将会打印 888
封装的实现:暴露
-
提供数据操作功能(
setter
)- 语法:使用@计算属性名.setter装饰器
- 调用:
实例.方法名
class Account:# 普通属性bank = "BOC"# 内部属性_username = "Hogwarts"# 私有属性__password = "888"@propertydef password(self):return self.__password@password.setterdef password(self, value):# 增加数据的校验if len(value) >= 8:self.__password = valueelse:print("密码长度最少要有8位!")# 实例化对象
obj = Account()# 修改私有属性(满足校验条件)
obj.password = "hogwarts666" # 修改成功
print(obj.password) # 将会打印 hogwarts666# 修改私有属性(不满足校验条件)
obj.password = "123" # 修改不会生效
print(obj.password) # 将会打印 888
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!