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

定义关联Teacher/Student的Interaction类报错,求正确实现

问题分析与修复

错误原因

你在Interaction类的构造方法里犯了两个关键错误:

  1. 错误绑定Teacher类而非实例:self.teacher = Teacher这行代码把Teacher类本身赋值给了self.teacher,而不是传入的teacher实例。当你调用self.teacher.start_new_subject()时,相当于直接调用类的未绑定方法,Python会要求手动传入self参数,这就是报错的核心原因。
  2. 学生实例化逻辑错误:[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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:34:57