设置私有属性,私有方法

2021-05-14  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读