Python使用super()时出现__init__()缺少1个必需位置参数错误如何解决
报错原因定位
该报错是类的构造方法__init__调用时缺少必填位置参数导致的,练习super()方法时该问题通常由以下几种操作错误引发:
- 父类
__init__定义了必填位置参数,使用super().__init__()调用父类构造方法时漏传对应参数
示例错误写法:
class Base: # 父类构造要求传入name参数 def __init__(self, name): self.name = name class Sub(Base): def __init__(self, age): super().__init__() # 此处未传入父类要求的name参数,触发报错 self.age = age
- 存在多层继承关系时,中间子类调用
super().__init__()没有透传上层父类需要的参数,导致顶层父类收不到必填参数 - 实例化子类对象时,没有传入子类
__init__要求的所有必填位置参数
修复步骤
- 先检查所有父类、子类的
__init__方法参数列表,梳理清楚每个构造方法的必填位置参数 - 子类调用
super().__init__()时,按父类要求的参数顺序传入所有必填参数,上述错误示例修复后写法如下:
class Sub(Base): def __init__(self, name, age): super().__init__(name) # 传入父类要求的name参数 self.age = age
- 多层继承场景下,所有中间子类调用
super().__init__()时都要完整透传上层父类需要的参数,避免参数断传 - 实例化子类对象时,按子类
__init__的参数要求传入所有必填参数
内容的提问来源于stack exchange,提问作者ACE
相关产品推荐
相关产品推荐

