用装饰器的两种完成以下封装: 定义一个Student类,包括name和scroe 属性,其中scroe为私有属性,利用装饰@property获取学生的成绩、利用@score.setter装饰修改学生成绩,并且要约定成绩范围在score<0or score>100。并测试
时间: 2024-02-05 15:13:22 浏览: 79
第一种装饰器实现:
```python
class Student:
def __init__(self, name, score):
self.name = name
self._score = score
@property
def score(self):
return self._score
@score.setter
def score(self, value):
if value < 0 or value > 100:
raise ValueError('成绩范围应该在0~100之间')
self._score = value
stu = Student('张三', 90)
print(stu.score)
stu.score = 120 # 抛出异常,成绩范围应该在0~100之间
```
第二种装饰器实现:
```python
class Student:
def __init__(self, name, score):
self.name = name
self.set_score(score)
def get_score(self):
return self._score
def set_score(self, value):
if value < 0 or value > 100:
raise ValueError('成绩范围应该在0~100之间')
self._score = value
score = property(get_score, set_score)
stu = Student('张三', 90)
print(stu.score)
stu.score = 120 # 抛出异常,成绩范围应该在0~100之间
```
阅读全文