隐藏属性
设置私有属性外部使用者,或者直接想修改或者使用该属性,方法的时候,需要通过开发者自己设置的规则来使用
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
网友评论