怎样为属性添加安全保护机制

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)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值