访问限制机制

访问限制机制

1.什么是访问限制机制?

  凡是以类内部定义的属性或方法

  以__开头的属性或方法名,都会被限制,外部不能“直接访问”该属性原型。

  ps:看着像将该属性或方法隐藏起来了。

#python特有的:

  注意:凡是在内部定义 __ 开头的属性或方法,都会变形为__ 类名__属性/方法。

2.为什么要有访问限制?

  比如:将一些隐私的数据,隐藏起来,不让外部轻易获取。

  -接口:

    可以将一堆数据封装成一个接口,可以让用户调用接口

    并且通过相应的逻辑,最后再将数据返回给用户

3.如何实现?

# demo1
class User:

    # __开头的属性
    __name = 'tank'  # __name变形为 ---》 _类名__name

    # __开头的方法
    def __run(self):
        print('tank is running...')


print(User.__name)
obj = User()
print(obj._User__name)



# # demo2
class User:
    # __开头的属性
    __name = 'tank'  # __name变形为 ---》 _类名__name
    __age = 17
    __sex = 'male'
    __ID = '46549846798468498498'
    __bal = 151651651651654654654
    # def __init__(self, name, age, sex):
    #     self.__name = name
    #     self.__age = age
    #     self.__sex = sex
    # 校验接口,获取用户信息
    def parse_user(self, username, password):
        if username == 'tank_jam' and password == '123':
            print(f'''
            通过验证,获取用户信息。
            用户名: {self.__name}
            用户年龄: {self.__age}
            用户性别: {self.__sex}
            身份ID: {self.__ID}
            用户资产: {self.__bal}
            ''')
        else:
            print('校验失败, 无法查询用户信息!')

    # __开头的方法
    def __run(self):
        print('tank is running...')

obj = User()
obj.parse_user('tank_jam', '1234')


# demo3:
class ATM:
    # 取钱功能:
    # 1.插入磁卡
    def __insert_card(self):
        print('开始插卡...')
        pass

    # 2.输入密码
    def __input_pwd(self):
        print('输入密码...')
        pass

    # 3.输入取款金额
    def __input_bal(self):
        print('输入取款金额...')
        pass

    # 4.吐钱
    def __output_money(self):
        print('开始吐钱...')
        pass

    # 5.打印流水账单
    def __print_flow(self):
        print('打印流水账单...')
        pass

    # 取款顺序规范接口:
    def withdraw(self):
        # 1.插入磁卡
        self.__insert_card()

        # 2.输入密码
        self.__input_pwd()

        # 3.输入取款金额
        self.__input_bal()

        # 4.吐钱
        self.__output_money()

        # 5.打印流水账单
        self.__print_flow()


amt_obj = ATM()
amt_obj.withdraw()
原文地址:https://www.cnblogs.com/lvguchujiu/p/11944560.html