1、只读属性
在python中,默认情况下,创建的类属性或者实例是可以在类体外进行修改的,如果想要限制其不能进行修改,可以将其设置为私有的。但是呢,如果将它设置为私有的,那么在类体外也不能获它的值。如果想要创建一个可以读取,但不能修改的属性,就要用到@property了。
如:
class TVshow:
def __init__(self,show):
self._show=show
@property
def show(self):
return self._show
tvshow=TVshow('正在播放的是xxx')
print('默认:',tvshow.show)
tvshow.show='接下来播放的是:'
#抛出异常
print(tvshow.show)
运行结果:
默认: 正在播放的是xxx
AttributeError: can't set attribute
2、属性拦截器
为属性设置拦截器就可以属性进行修改,但是修改的时候要遵守一定的约束,比如:
class TVshow:
list_film=['xxx','yyy','eee','mmm','jjj']
def __init__(self,show):
self._show=show
@property #将方法转换为属性
def show(self):
return self._show #返回私有属性的值
@show.setter #设置setter方法,让属性可修改
def show(self,value):
if value in TVshow.list_film:
self._show='您选择了《'+value+'》,稍后将播放'
else:
self._show='您所选的节目不存在'
tvshow=TVshow('xxx')
print('正在播放的是:《',tvshow.show,'》')
print('您可以从',tvshow.list_film,'中选择要点播的节目')
tvshow.show='yyy'
print(tvshow.show)