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.
相关产品推荐
相关产品推荐

