定义关联Teacher/Student的Interaction类报错,求正确实现
问题分析与修复
错误原因
你在Interaction类的构造方法里犯了两个关键错误:
- 错误绑定Teacher类而非实例:
self.teacher = Teacher这行代码把Teacher类本身赋值给了self.teacher,而不是传入的teacher实例。当你调用self.teacher.start_new_subject()时,相当于直接调用类的未绑定方法,Python会要求手动传入self参数,这就是报错的核心原因。 - 学生实例化逻辑错误:
[name(year) for name, year in students]里的name应该是你定义的学生类(比如Student),而非直接用元组第一个元素作为构造函数。
修正后的代码
class Teacher(Person): def __init__(self, age: int, subjects: list[Subject] | None = None) -> None: super().__init__(age) self.history = subjects if subjects is not None else [] self.current = [] def start_new_subject(self) -> None: self.history.extend(self.current) class Interaction: def __init__(self, teacher: Teacher, students: list[tuple[str, int]]) -> None: # 修正:绑定传入的teacher实例,而非Teacher类 self.teacher = teacher # 修正:用Student类实例化学生(假设你的学生类名为Student) self.students = [Student(name, year) for name, year in students] # 现在调用的是实例方法,Python会自动传入self参数 self.teacher.start_new_subject()
额外注意事项
- 实例化
Teacher时必须传入age参数,你之前的mr_A = Teacher()会报错,应改为mr_A = Teacher(age=35)(替换为实际年龄值)。 - 实例化
Interaction时,students参数里的学科名称应为字符串,比如("Math", 10),否则会被当作未定义变量处理。
内容的提问来源于stack exchange,提问作者Nemo
相关产品推荐
相关产品推荐

