Python TypeError问题咨询:module.__init__参数超出限制(传入3个)
解决
TypeError: module.__init__() takes at most 2 arguments (3 given) 错误 这个报错的核心原因其实很好定位,结合你提到的circle.py第4行触发错误,大概率是以下两种情况之一:
1. 最常见的问题:你继承了整个模块而非目标类
如果你的geometricObject.py文件中定义的是GeometricObject类,但你在circle.py里用了错误的导入方式,导致你继承的是整个geometricObject模块,而不是模块里的GeometricObject类。
举个错误示例(对应你报错的场景):
# circle.py 错误的写法 import geometricObject # 导入了整个模块 class Circle(geometricObject): # 这里继承的是模块,不是类! def __init__(self, radius, color, filled): geometricObject.__init__(self, color, filled) # 模块的__init__最多接受2个参数,你传了3个(self、color、filled) self.radius = radius
修正方式:
改成从模块中导入具体的类:
# circle.py 正确的写法 from geometricObject import GeometricObject # 导入模块里的GeometricObject类 class Circle(GeometricObject): # 继承类而非模块 def __init__(self, radius, color="white", filled=True): super().__init__(color, filled) # 推荐用super()调用父类构造,更灵活 # 或者显式调用父类构造:GeometricObject.__init__(self, color, filled) self.radius = radius
2. 次要可能:调用父类构造时传参不符合父类定义
如果你的导入是正确的,那就要检查GeometricObject类的__init__方法参数数量。比如如果父类的__init__只接受self这一个参数(没有额外的color、filled参数),但你调用时传了多个参数,也会触发类似错误。
比如父类定义是:
# geometricObject.py class GeometricObject: def __init__(self): # 只有self一个参数 self.color = "white" self.filled = True
但你在Circle里这样调用:
super().__init__(color, filled) # 这里多传了2个参数,导致总数超过父类允许的数量
这种情况就要调整父类构造的调用方式,只传self(或者根据父类的参数定义传对应的值)。
内容的提问来源于stack exchange,提问作者Ben Roux
相关产品推荐
相关产品推荐

