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

Python子类继承报错:TypeError参数数量不匹配问题求助

问题分析与解决方案

错误根源

  1. 参数数量不匹配:Molecularbiology类的__init__方法仅定义了4个位置参数(不含self),但实例化时传入了5个参数,触发TypeError。
  2. 未定义参数引用:Molecularbiology的__init__中调用父类构造时使用了prog_lang,但该参数并未在方法参数列表中声明,会引发NameError。
  3. 父类参数传递缺失:父类Employee的构造需要prog_lang参数,但子类调用时未正确传递,导致父类初始化不完整。

修正后的代码

class Employee:
    raise_amount = 1.08
    def __init__(self, first, last, pay, prog_lang):
        self.first = first.strip()
        self.last = last.strip()
        self.pay = pay
        self.email = f"{self.first}.{self.last}@gmail.com"
        self.prog_lang = prog_lang  # 父类保存该属性,确保实例可访问

class Developer(Employee):
    def __init__(self, first, last, pay, prog_lang):
        super().__init__(first, last, pay, prog_lang)  # 补全父类所需的prog_lang参数

class Molecularbiology(Employee):
    def __init__(self, first, last, pay, prog_lang, mol_bio):  # 新增prog_lang参数,匹配父类需求
        super().__init__(first, last, pay, prog_lang)  # 正确传递父类全部参数
        self.mol_bio = mol_bio  # 初始化子类自定义属性

# 实例化参数数量与方法定义完全匹配
dev_1 = Molecularbiology('Kubri', 'Lyreco', 100000, 'Python', 'RNASeq')
dev_2 = Molecularbiology('Vikki', 'Suomalainen', 50000, 'Javascript', 'Microscopy')

print(dev_1.email)
print(dev_1.prog_lang)
print(dev_1.mol_bio)

核心修改说明

  • 给Employee类的__init__添加self.prog_lang = prog_lang,确保实例能正常访问该属性(否则打印dev_1.prog_lang会报错)。
  • 修正Developer类的父类构造调用,补全prog_lang参数,避免父类初始化失败。
  • 调整Molecularbiology的__init__参数列表,新增prog_lang并在父类构造调用中传递,保证父类初始化完整。
  • 实例化Molecularbiology时的参数数量与方法定义一致,解决位置参数不匹配问题。

内容的提问来源于stack exchange,提问作者hupA mCherry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:35:31