Python调用类方法报takes 2 positional arguments but 3 were given错误求解
TypeError报错原因分析
该报错由Python类方法的参数传递规则和实际方法签名不匹配导致,具体原因如下:
- 首先明确Python实例方法的传参逻辑:调用实例对象的方法时,Python会自动将实例自身作为第一个参数传入方法的
self位,你显式传入的参数会依次向后匹配。你调用new.network_combine1A_1((128, 130, 1), (55,))时,实际传入方法的参数总共有3个:new实例(对应self)、(128, 130, 1)、(55,)。 - 报错提示方法仅接收2个位置参数,说明你
network_final.py文件中实际定义的network_combine1A_1方法的签名和你预期的不一致,常见两种场景:- 场景1:你实际写的方法漏写了第二个入参,真实签名为
def network_combine1A_1(self, input_shape1):,包含self一共只有2个参数,和传入的3个参数不匹配触发报错。 - 场景2:你误给该方法加了
@staticmethod装饰器,静态方法不会自动接收实例作为self参数,但你方法定义里仍然保留了self入参,此时你传入的2个显式参数加上需要匹配的self、input_shape1两个参数,就会出现多1个参数的报错。
- 场景1:你实际写的方法漏写了第二个入参,真实签名为
修复方案
你可以通过打印方法签名快速定位问题:
from network_final import Network_1 import inspect new = Network_1() # 打印方法的实际参数列表 print(inspect.signature(new.network_combine1A_1))
- 如果输出为
(input_shape1),直接补全方法定义的第二个入参input_shape2即可。 - 如果输出显示该方法为静态方法,删除
@staticmethod装饰器,或者调整方法参数列表适配静态方法规则即可。
内容的提问来源于stack exchange,提问作者wang William
相关产品推荐
相关产品推荐

