python_day7 property ,封装
类的函数中增加property 装饰器,
在外部调用函数的时候 不用加括号,伪装成属性的形式
#######################
class Foo:
@property
def test(self):
print('is ok')
A=Foo()
A.test
###############################################
修改隐藏函数、变量 方法1:
内部调用,传递变量
####################################
class GO:
def __init__(self,name,age):
self.__name=name
self.__age=age
def ok(self):
print('Foo的age:', self.__age)
def XG(self,x,y):
if not isinstance(x,str):
raise TypeError('名字必须是字符串')
if not isinstance(y,int):
raise TypeError('年龄必须是数字')
self.__name=x
self.__age=y
A=GO('la',18)
A.XG('onda',20)
A.ok()
######################################
通过使用property 将 函数 模拟成为 变量 来拿结果
那么 设置 隐藏属性, 也可以 模拟成为 变量的方式 : xx=N
#################################################
class GO:
def __init__(self,name,age):
self.__name=name
self.__age=age
@property
def pri_name(self):
return self.__name
@pri_name.setter
def pri_name(self,x):
self.__name=x
# print(self.__name)
@pri_name.getter
def pri_name(self):
print(self.__name)
@pri_name.deleter
def pri_name(self):
del self.__name
A=GO('la',18)
A.pri_name
A.pri_name='onda'
print('------------>')
A.pri_name
del A.pri_name
A.pri_name #-->删除后 获取不到,报错
要注意的是,函数名都是相同的,都是 @property 下面的函数名
下面使用的是 setter ,getter deleter
########################################
增加权限判断以后
##################################
class Foo:
def __init__(self,name,QX='False'):
self.__name=name
self.QX=QX
@property
def name(self):
pass
# print(self.__name)
@name.getter
def name(self):
return self.__name
@name.setter
def name(self,x):
self.__name=x
@name.deleter
def name(self):
if self.QX!='True':
raise TypeError('没有权限')
del self.__name
JG=Foo('la','True')
print(JG.name)
JG.name='onda'
print(JG.name)
del JG.name
print(JG.name)