类中属性和方法的访问限制机制

python

类中属性和方法的访问限制机制

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()

  执行结果:

插卡

输入密码

输入金额

开始出钱

打印账单

以上是 类中属性和方法的访问限制机制 的全部内容, 来源链接: utcz.com/z/530672.html

回到顶部