使用@property
为了实现将分数设定一个范围值,可以加入@property
的方法,类似于之前的装饰器的作用。
class Student(object):
def get_score(self):
return self._score
@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作。
练习
请利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution:
class Screen(object):
@property
def width(self):
return self._width
@width.setter
def width(self, value):
# if not isinstance(value, int):
# raise ValueError('score must be an integer!')
# if value < 0 or value > 1920:
# raise ValueError('score must between 0 ~ 1920!')
self._width = value
@property
def height(self):
return self._height
@height.setter
def height(self, value):
self._height = value
@property
def resolution(self):
return self._width * self._height
# 测试:
s = Screen()
s.width = 1024
s.height = 768
print('resolution =', s.resolution)
if s.resolution == 786432:
print('测试通过!')
else:
print('测试失败!')