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

Python不修改原有类继承两个类时__init__参数缺失报错怎么解决

错误原因

你的报错是Python多继承的MRO(方法解析顺序)规则导致的:ScientificSwimmer的继承链优先级为ScientificSwimmer > Scientist > Swimmer > Human,当你调用Scientist.__init__时,其内部的super().__init__(name, age)实际会调用顺序中下一个类Swimmer的构造方法,而Swimmer.__init__要求传入hours参数,你没有传递,就触发了缺少位置参数的TypeError。

解决方案

在不修改Human/Scientist/Swimmer三个上层父类的前提下,我们只需要修改ScientificSwimmer的构造逻辑,手动完成所有属性初始化,绕过父类构造的super调用冲突即可:

  • 直接调用顶层父类Human的构造初始化name、age属性
  • 手动给实例赋值Scientist需要的lab属性、Swimmer需要的hours属性
  • 去掉实例化时name参数前多余的换行符\n,避免输出前出现空行

修正后完整代码

class Human:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def hobby(self):
        print("Likes watching Netflix")

    def info(self):
        print(self.name , "is ",self.age," years old")


class Scientist(Human):
    def __init__(self, name, age, lab):
        super().__init__(name, age)
        self.lab = lab

    def hobby(self):
        print("Likes doing scientific experiments")

    def labName(self,lab):
        print("works at the " ,lab, "laboratory")


class Swimmer(Human):
    def __init__(self, name, age, hours):
        super().__init__(name,age)
        self.hours = hours

    def hobby(self):
        print("likes swimmming in the lake" )

    def hoursSwimming(self, hours):
        print("swims ", hours , "hours per week")


class ScientificSwimmer(Scientist, Swimmer):
    def __init__ (self, name, age, lab, hours):
        # 直接调用顶层父类初始化公共属性
        Human.__init__(self, name, age)
        # 手动赋值两个父类各自需要的属性
        self.lab = lab
        self.hours = hours


scienswim = ScientificSwimmer("John Smith", 30, "nuclear", 100)
scienswim.info()
scienswim.hobby()
scienswim.labName("nuclear")
scienswim.hoursSwimming(100)

运行输出

John Smith is  30  years old
Likes doing scientific experiments
works at the  nuclear laboratory
swims  100 hours per week

注:输出和你期望的格式差异仅为原有父类定义的字符串首字母大小写、空格差异,无需修改父类即可满足核心逻辑要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:06:08