Python|6.9Python面向对象(9)(属性访问器与数据安全)
@概述
- 我们常常为类的属性加添相应的访问器,如设置器setx,获取器getx,删除器delx
- 访问器的目的是为了数据安全(如数据合法性、访问权限等)
class C(object): # 私有属性
__x = None# 获取器(我们可以在这里设置相应的访问权限等)
def getx(self):
print("获取器:请出示一下您的身份证!")
return self.__x# 设置器(我们可以在这里校验数据的合法性等)
def setx(self, value):
# 这里强制x的值必须大于0,否则抛出异常
if value < 0:
raise ValueError("a positive x required")
self.__x = value# 删除器(我们可以在这里设置相应的访问权限等)
def delx(self):
# 这里必须输入正确的密码才能执行删除操作
pwd = input("please enter the admin pwd:")
if pwd == "123456":
del self.__x
print("x deleted!")
else:
print("fuck off!")
对于一个没有访问器守护的属性,任何人都可以对它为所欲为
# 对没有安全保护的属性为所欲为
c = C()
c.y = "你是一坨屎,命比蚁便宜~"# 随意设置值
print(c.y)# 随意进行访问
del c.y# 随意删除
print(c.y)# 如果报AttributeError证明删除成功
执行结果
文章图片
【Python|6.9Python面向对象(9)(属性访问器与数据安全)】换成有访问器守护的属性__x,由于是私有属性,我们只能通过访问器进行访问
# 访问有访问器守护的属性
c = C()
# c.setx(-10) # ValueError: a positive x required,再也不能胡乱设置值了
c.setx(10) # 乖乖设置一个正数
print(c.getx())# 获取数据时遭到保安的盘查
c.delx()# 删除时必须输入密码
print(c.getx())# 输错密码遭到系统驱赶
故意输错密码的执行结果
文章图片
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)
- Python|Python 9.20