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

Python如何实现向Classroom类中添加不重复的Student类成员

问题根源

  • 你传入add_student方法的是Student类的实例对象,原有逻辑判断的是实例对象本身是否存在于列表中,你创建的三个名为Joe的学生是独立的实例,内存地址完全不同,所以判断都会通过,全部被加入列表。
  • Classroom类中student_list的类型标注错误,应该是list[Student](存储Student实例的列表),而非单个Student类型。
  • 参数命名有歧义:add_student的参数名是student_name,但实际接收的是Student实例,容易误导逻辑判断。

修改方案

调整添加/删除学生的判断逻辑,改为校验学生的name属性是否重复,修改后的完整代码如下:

class Student:
    def __init__(self, student_name):
        self.name: str = student_name
        self.age: int = 0
        self.gender: str = ''

class Classroom:
    def __init__(self, classroom_name):
        self.classroom_name: str = classroom_name
        self.teacher_name: str = ''
        # 修正类型标注
        self.student_list: list[Student] = []

    def add_student(self, student: Student):
        # 遍历列表判断是否有重名的学生
        for exist_student in self.student_list:
            if exist_student.name == student.name:
                # 重名直接返回不添加
                return
        self.student_list.append(student)

    def remove_student(self, student_name: str):
        # 按姓名删除对应学生
        for exist_student in self.student_list:
            if exist_student.name == student_name:
                self.student_list.remove(exist_student)
                return

    def list_student(self):
        for s in self.student_list:
            print(s.name)

classroom = Classroom('Science')

std1 = Student('Joe')
std2 = Student('Joe')
std3 = Student('Joe')
classroom.add_student(std1)
classroom.add_student(std2)
classroom.add_student(std3)

classroom.list_student()

运行效果

修改后运行只会输出一次Joe,符合重名学生不重复添加的需求。

内容的提问来源于stack exchange,提问作者Andrew H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:57:01