类中属性和方法的访问限制机制
类中属性和方法的访问限制机制
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()
执行结果:
插卡
输入密码
输入金额
开始出钱
打印账单