Python子类构造调用super().__init__时提示参数数量不符如何解决?
问题原因
Python 中调用类的实例方法时,self 参数会由解释器自动隐式传入,不需要手动传递。你在调用 super().__init__ 时额外传入了 self,导致参数数量超出父类构造函数的接收范围,同时触发参数错位。
具体逻辑:
- 父类
Character的__init__方法定义了4个参数:self+ 3个业务参数,调用时仅需要手动传入3个业务参数即可 - 你当前的写法
super().__init__(self, name, base_stats, base_growths)手动传入了4个参数,加上自动隐式传入的self,总共传入了5个参数,和报错信息完全匹配 - 参数错位的原因:父类
__init__的形参依次接收了「隐式self」→「你手动传的Knight实例」→「name字符串」→「base_stats值」,最后多余的base_growths没有对应形参,就出现了你测试时观察到的赋值混乱问题。
解决方法
把子类 Knight 构造函数中调用父类构造的代码里的self删除即可,修正后代码如下:
class Character: def __init__(self, name, base_stats, base_growths): self.name = name self.stats = base_stats self.growths = base_growths class Knight(Character): def __init__(self, name, base_stats, base_growths): # 去掉手动传的self,仅传业务参数即可 super().__init__(name, base_stats, base_growths) lancelot_bases = "placeholder" lancelot_growths = "placeholder" lancelot = Knight("Lancelot", lancelot_bases, lancelot_growths)
运行后即可正常实例化对象。
内容的提问来源于stack exchange,提问作者Maxx
相关产品推荐
相关产品推荐

