📖 知识点回顾
__init__构造方法,初始化对象属性实例方法:对象的行为
__str__自定义打印对象封装:将数据与操作数据的方法打包在一起,对外提供接口,不随意直接修改内部属性
任务设计思路:
学员类内部保存姓名、年龄、分数
不建议外部直接修改分数,提供专门方法修改分数,并增加分数校验
使用
__str__美化打印输出
⚔️ Kata 实战任务
任务需求:
创建
Student类__init__接收 name, age, score,将 score 设置为单下划线保护属性_score编写实例方法
set_score(new_score):修改分数,做范围校验 0~100,非法则提示不修改编写实例方法
get_score():读取分数实现
__str__,返回信息:学员:xx,年龄xx岁,当前分数:xx实例化 stu = Student ("小雅",15,90)
打印 stu;调用 set_score 修改分数为 96,再次打印;尝试传入 105,观察校验提示
参考代码
class Student:
def __init__(self, name, age, score):
self.name = name
self.age = age
self._score = score # 保护属性,不建议外部直接访问
def set_score(self, new_score):
"""修改分数,带范围校验"""
if 0 <= new_score <= 100:
self._score = new_score
print(f"✅ 分数修改成功,新分数:{self._score}")
else:
print("❌ 分数修改失败,分数必须在0~100之间!")
def get_score(self):
"""获取分数"""
return self._score
def __str__(self):
return f"学员:{self.name},年龄{self.age}岁,当前分数:{self._score}"
stu = Student("小雅", 15, 90)
print(stu)
stu.set_score(96)
print(stu)
stu.set_score(105)
print(stu)
运行输出:
学员:小雅,年龄15岁,当前分数:90
✅ 分数修改成功,新分数:96
学员:小雅,年龄15岁,当前分数:96
❌ 分数修改失败,分数必须在0~100之间!
学员:小雅,年龄15岁,当前分数:96
🧠 思考题
我们把 score 写成
_score,然后通过 set_score、get_score 读写,相比外部直接修改 stu.score,优势是什么?如果新增需求:每次修改分数,自动记录修改时间,代码应该写在哪里?
行者孙Python