python @propert装饰器使用方法原理解析
这篇文章主要介绍了python@propert装饰器使用方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
首先,@propert的作用是把类中的方法『变成』了属性,方便通过实例访问。propert可以有两种用法:可以把一个方法变成只读属性;可以对一些属性进行过滤。
想象这样一个场景,在实例化一个类之后,需要对类的一个属性进行赋值,这时候是没有对属性属性被赋予的值进行判断的,如果属性被赋予了一个不合适的值,那么代码在后面执行的时候就会报错,为了避免这种情况,可以有两种方法解决。
一:设置一个方法,对属性值进行判断:
classStudent(): defget_score(self): returnself._score defset_score(self,value): ifnotisinstance(value,int): raiseValueError('scoremustbeaninteger!') ifvalue<0orvalue>100: raiseValueError('scoremustbetween0~100!') self._score=value if__name__=='__main__':s=Student()s.set_score(value="88")print(s.get_score())
再Student类中,为了避免直接对_score属性操作,我们提供了get_score和set_score方法,这样起到了封装的作用,把一些不想对外公开的属性隐蔽起来,而只是提供方法给用户操作,在方法里面,我们可以检查参数的合理性等。这样做没什么问题,但是我们有更简单的方式来做这件事。
二:使用propert装饰器。
classTeacher(): @property defscore(self): returnself._score @score.setter defscore(self,value): ifnotisinstance(value,int): raiseValueError('scoremustbeaninteger!') ifvalue<0orvalue>100: raiseValueError('scoremustbetween0~100!') self._score=value if__name__=='__main__': t=Teacher() t.score=10 print(t.score) t.score=20 print(t.score)
在上面,我们给方法score加上了@property,于是我们可以把score当成一个属性来用,此时,又会创建一个新的装饰器score.setter,它可以把被装饰的方法变成属性来赋值。
另外,我们也不一定要使用score.setter这个装饰器,这时score就变成一个只读属性了:
classtest(): def__init__(self,s1): self.s=s1 @property deff1(self): returnself.s if__name__=='__main__': t1=test(s1=90) print(t1.f1)
注意:最后面一行的print(t1.f1)不要加括号,print(t1.f1()),要不会报错'int'objectisnotcallable
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。