@property - python内建装饰器
控制实例属性访问修改。优化代码,实现限制,减少错误
如果,不想写s.set_score(9999),直接写s.score = 9999更快
可以使用@property装饰器
把get方法变为属性只需加上@property装饰器即可,
此时@property本身又会创建另外两个装饰器:@score.setter,@score.deleter
修改前:
class Student(object):
def get_score(self):
return self._score
def set_score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
def del_score(self):
del self._score
>>> s = Student()
>>> s.set_score(60) # ok!
>>> s.get_score()
60
>>> s.del_score()
修改后:
class Student(object):
@property
def score(self):
return self._score
@score.setter
def score(self,value):
if not isinstance(value, int):
raise ValueError('分数必须是整数才行呐')
if value < 0 or value > 100:
raise ValueError('分数必须0-100之间')
self._score = value
@score.deleter
def score(self):
del self._score
>>> s = Student()
>>> s.score = 60 # OK,实际转化为s.set_score(60)
>>> s.score # OK,实际转化为s.get_score()
60
>>> del s.score