Python类构造函数传参报错:TypeError提示无需参数求助
问题排查与解决
核心错误原因
你把类的构造函数__init__误写成了__int__。__int__是Python中用于将对象转换为整数的魔法方法,并非初始化类实例的构造函数。当你调用ddpgAgent(参数)时,Python会寻找类的__init__方法,但你未正确定义该方法,因此会使用默认的无参构造函数,最终触发"takes no arguments"的错误。
修复步骤
- 将
ReplayMemory类中的__int__(self, mem_size, state_dim, action_dim)修改为__init__(self, mem_size, state_dim, action_dim) - 将
ddpgAgent类中的__int__方法同样修改为__init__
代码对比示例
错误代码
class ReplayMemory: # 错误:构造函数名写错 def __int__(self, mem_size, state_dim, action_dim): self.mem_size = mem_size self.state_dim = state_dim self.action_dim = action_dim # 其他初始化逻辑 class ddpgAgent: # 错误:构造函数名写错 def __int__(self, agent_params): self.memory = ReplayMemory(agent_params['mem_size'], agent_params['state_dim'], agent_params['action_dim']) # 其他初始化逻辑 # 调用时报错 agent = ddpgAgent({'mem_size': 1000, 'state_dim': 4, 'action_dim': 2})
正确代码
class ReplayMemory: # 正确:使用__init__作为构造函数 def __init__(self, mem_size, state_dim, action_dim): self.mem_size = mem_size self.state_dim = state_dim self.action_dim = action_dim # 其他初始化逻辑 class ddpgAgent: # 正确:使用__init__作为构造函数 def __init__(self, agent_params): self.memory = ReplayMemory(agent_params['mem_size'], agent_params['state_dim'], agent_params['action_dim']) # 其他初始化逻辑 # 正常调用 agent = ddpgAgent({'mem_size': 1000, 'state_dim': 4, 'action_dim': 2})
验证结果
修改完成后,PyCharm的"意外参数"提示会自动消失,终端运行时不会再触发TypeError,类实例可正常完成初始化并使用。
内容的提问来源于stack exchange,提问作者GrimeyK18
相关产品推荐
相关产品推荐

