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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:10