You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写可将Student类对象存入集合的UniClass类?

修正UniClass类的实现问题

需求回顾

  • Student类已实现,可创建包含name、imt_name、semester属性的对象,且__str__方法能返回格式化的学生信息
  • 需要实现的UniClass类要求:
    • 拥有类名称属性
    • 支持将Student对象注册到内部集合中
    • __str__方法:集合为空时返回"set()",非空时返回包含所有学生信息的集合格式内容

原代码的问题分析

你的UniClass类存在多处逻辑错误:

  1. 未初始化学生存储集合:__init__方法里没有创建用于存放Student对象的集合,后续无法维护学生列表
  2. enroll_student方法逻辑混乱:
    • 错误调用Student.str()(这不是正确的调用方式,完全不符合添加学生的需求)
    • 使用全局变量x标记集合状态,既不安全也没必要,直接检查自身的学生集合即可
    • 参数命名不合理(如果是添加单个学生,参数名应该是student而非students),且没有实现添加学生的逻辑
  3. __str__方法错误:
    • 依赖未初始化的全局变量x,未调用enroll_student时会触发未定义错误
    • 引用未定义的变量students,应该访问实例的self.students
    • 没有正确格式化集合输出,需要把每个Student对象转为字符串后再组织成集合格式

修正后的代码

class Student:
    def __init__(self, name, imt_name, semester):
        """Constructor"""
        self.name = name
        self.imt_name = imt_name
        self.semester = semester

    def __str__(self):
        return "{} [{}] in Semester {}".format(self.name, self.imt_name, self.semester)


class UniClass:
    def __init__(self, name):
        """Constructor"""
        self.name = name
        # 初始化空集合用于存储Student对象
        self.students = set()

    def enroll_student(self, student):
        # 确保传入的是Student实例,再添加到集合
        if isinstance(student, Student):
            self.students.add(student)

    # 可选:添加批量注册学生的方法
    def enroll_students(self, students_list):
        for student in students_list:
            if isinstance(student, Student):
                self.students.add(student)

    def __str__(self):
        if not self.students:
            return "set()"
        # 将集合中的每个Student对象转为字符串,再组织成集合格式的字符串
        student_strs = [str(s) for s in self.students]
        return "{" + ", ".join(student_strs) + "}"

代码解释

  1. UniClass的初始化:
    • 在__init__中新增self.students = set(),创建空集合专门存放Student对象
  2. 注册学生方法:
    • enroll_student方法接收单个Student对象,通过isinstance校验类型后添加到集合
    • 可选的enroll_students方法支持批量添加学生列表,更实用
  3. __str__方法:
    • 直接检查self.students是否为空,无需全局变量
    • 非空时,把集合里的每个Student对象通过str()转为格式化字符串,再用join拼接成类似集合的格式输出

测试示例

# 创建学生实例
s1 = Student("Alice", "IMT001", 2)
s2 = Student("Bob", "IMT002", 3)

# 创建班级实例
math_class = UniClass("Advanced Math")

# 打印空班级
print(math_class)  # 输出: set()

# 注册学生
math_class.enroll_student(s1)
math_class.enroll_students([s2])

# 打印有学生的班级
print(math_class)  
# 输出: {Alice [IMT001] in Semester 2, Bob [IMT002] in Semester 3}

内容的提问来源于stack exchange,提问作者user20458448

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:10:30