行者孙Python

铸器篇-Day77|OOP 实战 Kata:学员类封装

📖 知识点回顾

  1. __init__构造方法,初始化对象属性

  2. 实例方法:对象的行为

  3. __str__自定义打印对象

  4. 封装:将数据与操作数据的方法打包在一起,对外提供接口,不随意直接修改内部属性

任务设计思路:

  • 学员类内部保存姓名、年龄、分数

  • 不建议外部直接修改分数,提供专门方法修改分数,并增加分数校验

  • 使用__str__美化打印输出

⚔️ Kata 实战任务

任务需求:

  1. 创建Student类

  2. __init__接收 name, age, score,将 score 设置为单下划线保护属性 _score

  3. 编写实例方法 set_score(new_score):修改分数,做范围校验 0~100,非法则提示不修改

  4. 编写实例方法 get_score():读取分数

  5. 实现__str__,返回信息:学员:xx,年龄xx岁,当前分数:xx

  6. 实例化 stu = Student ("小雅",15,90)

  7. 打印 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

 

🧠 思考题

  1. 我们把 score 写成_score,然后通过 set_score、get_score 读写,相比外部直接修改 stu.score,优势是什么?

  2. 如果新增需求:每次修改分数,自动记录修改时间,代码应该写在哪里?

‹ 返回目录
🏠首页 Python 📦资源 👤关于我