Python子类继承报错:TypeError参数数量不匹配问题求助
问题分析与解决方案
错误根源
- 参数数量不匹配:
Molecularbiology类的__init__方法仅定义了4个位置参数(不含self),但实例化时传入了5个参数,触发TypeError。 - 未定义参数引用:
Molecularbiology的__init__中调用父类构造时使用了prog_lang,但该参数并未在方法参数列表中声明,会引发NameError。 - 父类参数传递缺失:父类
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
相关产品推荐
相关产品推荐

