python中property的用法,property在python中
再看狗书,在定义用户表的时候看到了下面两行。
@ property def Password(self):raise attribute error( Password不是可读属性)@ Password . setter def Password(self,Password): self。password _ hash=generate _ password _ hash(password)因此,请检查该属性的用法。
我们在定义数据库字段类的时候,经常需要对类的属性做一些限制,一般是用get和set方法编写的。那么,在python中,我们能做些什么来优雅地实现期望的限制并减少错误的发生呢?这个时候,我们需要我们的@property来发光,巴拉巴拉能源.
用代码的例子更容易理解,比如这样定义的一个学生的成绩单。
类学生(object): def get_score(self):返回self。_score def set_score(self,value): if not isinstance(value,int): raise ValueError(score必须是整数!)如果值为0或值为100:提高ValueError(分数必须在0 ~ 100之间!)自我。_score=value当我们打电话时,我们需要这样打电话:
s=Student() s.set_score(60) # ok!s . get _ score()60s . set _ score(9999)回溯(最近一次调用last):值错误:分数必须在0 ~ 100之间!但是为了方便和省时,我们不想写s.set_score(9999)。直接写s.score=9999不是更快吗?添加方法做限制不能让调用麻烦。@物业,快来帮忙.
班级学生(对象):@property def score(self):返回self。_ score @ score . setter def score(self,value): if not isinstance(value,Int): raise ValueError(分数必须是整数)if value 0或value 100: raise value error(分数必须在0到100之间)self。_score=value看上面的代码,要把get方法改成属性,只需添加@property decorator即可。这时,@property本身会创建另一个decorator @score.setter,负责把set方法改成给属性赋值。这样做了以后,就可控了,方便我们调用。
S=Student() s.score=60 # OK,实际转换为s.set_score(60) s.score # OK,实际转换为s . get _ score()60s . score=9999 trace back(最近一次调用last):值错误:分数必须下注。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。