class Student(object):
'''
把一个getter方法变成属性,只需要加上@property就可以了,
此时,@property本身又创建了另一个装饰器@score.setter,
负责把一个setter方法变成属性赋值
'''
@property
def score(self):
return self._score
@score.setter
def 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
s = Student()
s.scroe = 60 # 等同于s.set_score(60)
print(s.scroe)
# 请利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution:
class Screen(object):
@property
def width(self):
return self._width # 必须加下划线,否则会调用width本身
@width.setter
def width(self, value):
if not isinstance(width, int):
raise ValueError('必须是数字!')
self._width = value
@property
def height(self):
return self._height
@height.setter
def height(self, value):
if not isinstance(width, int):
raise ValueError('宽度必须是数字!')
self._height = value
# 定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性
@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('测试失败!')
@property
最新推荐文章于 2024-10-18 00:00:00 发布