美文网首页
设置私有属性,私有方法

设置私有属性,私有方法

作者: 山猪打不过家猪 | 来源:发表于2021-05-14 18:06 被阅读0次

    隐藏属性

    设置私有属性外部使用者,或者直接想修改或者使用该属性,方法的时候,需要通过开发者自己设置的规则来使用

    
    class People(object):
       
        def __init__(self,name):
            self.__name = name
    
        def get_name(self):
            print(self.__name)
    
        def set_name(self,new_name):
            """
            可以在接口之上附加任何逻辑,限制使用者
            :param new_name:
            :return:
            """
            if type(new_name) is not str:
                print("必须字符串")
                return
            self.__name =new_name
    
    
    p1 = People("菊菊")
    p1.get_name()
    p1.set_name("蟹蟹")
    p1.get_name()
    p1.set_name(1)
    
    >>>
    菊菊
    蟹蟹
    必须字符串
    

    隐藏方法

    隐藏方法和隐藏属性是一样的,类内部不需要提供外部使用者,或者 类内部 方法与方法之间交互时,使用使用隐藏方法, 然后将最终得出来返回结果,通过一个公开方法返回给外部使用,这样隔离的复杂度,例如,取款机功能,外部使用者,只需调用取款功能,就可以得到结果,不需要关心其他方法

    >>> class ATM:
    ...     def __card(self): #插卡
    ...         print('插卡')
    ...     def __auth(self): #身份认证
    ...         print('用户认证')
    ...     def __input(self): #输入金额
    ...         print('输入取款金额')
    ...     def __print_bill(self): #打印小票
    ...         print('打印账单')
    ...     def __take_money(self): #取钱
    ...         print('取款')
    ...     def withdraw(self): #取款功能
    ...         self.__card()
    ...         self.__auth()
    ...         self.__input()
    ...         self.__print_bill()
    ...         self.__take_money()
    ...
    >>> obj=ATM()
    >>> obj.withdraw()
    
    

    property

    平时我们在写程序时候,比如设置name这个方法是时候,希望的是直接使用name="菊菊"来设置,但是这样的情况会使得,无法判断我们设置的值是否符合程序需求,该方法就可以解决这样的问题

    class People(object):
    
        def __init__(self,name):
            self.__name = name
    
        @property
        def name123(self):
            return self.__name
    
        @name123.setter
        def name123(self,new_name):
            if not isinstance(new_name,str):
                raise TypeError(f'{new_name} must be str')
            self.__name= new_name
        @name123.deleter
        def name123(self):
            raise PermissionError('Can not be deleted')
    
    p1 = People("菊菊")
    print(p1.name123)
    p1.name123='蟹蟹'
    print(p1.name123)
    del p1.name123
    >>>
    菊菊
    蟹蟹
    Traceback (most recent call last):
      File "C:/Users/Core/Desktop/hotShopGoods3.0/test4.py", line 58, in <module>
        del p1.name123
      File "C:/Users/Core/Desktop/hotShopGoods3.0/test4.py", line 52, in name123
        raise PermissionError('Can not be deleted')
    PermissionError: Can not be deleted
    
    

    相关文章

      网友评论

          本文标题:设置私有属性,私有方法

          本文链接:https://www.haomeiwen.com/subject/bkzqjltx.html