类中属性和方法的访问限制机制
1、什么是访问限制机制
凡是在类内部定义的属性或方法,以__开头的属性或者方法名,都会被限制,外部不能 "直接访问" 该属性原型(这是python特有的)
PS:看起来就像是将该属性或方法隐藏起来了
注意:凡是在类内部定义__开头的属性或方法,都会变形为:_类名__属性/方法,可以通过 "对象._类名__属性/方法" 调用
2、为什么要使用访问限制机制
可以将一些隐私的数据,隐藏起来,不让外部轻易获取
应用场景:
可以将一些数据封装成一个接口,可以让用户调用接口,并且通过相应的逻辑判断或者校验,最后再将数据返回给用户
3、例:访问限制机制
例1:使用访问机制 取数据
class Animal: # __开头的属性 __name = "pig" # __name变形为 _类名__name # __开头的方法 def __run(self): print("pig is running...") # 直接访问 # print(Animal.__name) # 报错:AttributeError: type object 'Animal' has no attribute '__name' obj = Animal() # 对象._类名__name print(obj._Animal__name) obj._Animal__run()
执行结果:
pig pig is running...
例2:通过校验返回用户信息(用户信息为隐私数据)
class Animal: __name = "pig" __age = 18 __sex = "female" __ID = "418412194502301548" # def __init__(self, name, age, sex): # self.__name = name # self.__age = age # self.__sex = sex def parse_user(self, username, password): if username == "pig" and password == "123": print(f""" 通过验证,获取到用户数据: 姓名:{self.__name} 年龄:{self.__age} 性别:{self.__sex} 身份ID:{self.__ID} """) else: print("校验失败,无法查询用户信息") # __开头的方法 def __run(self): print("pig is running...") username = input("请输入账号:").strip() password = input("请输入密码:").strip() obj = Animal() obj.parse_user(username, password)
执行结果:
# 正确结果 请输入账号:pig 请输入密码:123 通过验证,获取到用户数据: 姓名:pig 年龄:18 性别:female 身份ID:418412194502301548 # 错误结果 请输入账号:pig 请输入密码:123456 校验失败,无法查询用户信息
例3:将ATM取款操作按照顺序封装起来
""" ATM机取钱: 1.插卡 2.输入密码 3.输入取款金额 4.出钱 5.打印流水账单 """ class ATM: # 1.插卡 def __insert_car(self): print("插卡") # 2.输入密码 def __input_put(self): print("输入密码") # 3.输入取款金额 def __input_balance(self): print("输入金额") # 4.出钱 def __output_money(self): print("开始出钱") # 5.打印流水账单 def __print_flow(self): print("打印账单") # 取款顺序规范接口,按照1-5顺序进行取款操作 def withdraw(self): self.__insert_car() self.__input_put() self.__input_balance() self.__output_money() self.__print_flow() obj = ATM() obj.withdraw()
执行结果:
插卡
输入密码
输入金额
开始出钱
打印账单