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

Python类实例化报错:__init__() takes exactly 2 arguments (3 given)求助

解决Python类初始化的TypeError问题

看起来你遇到的这个错误有点“矛盾”——从你贴的代码来看,Player类的__init__明明定义了接受Pos和Stack两个参数(加上self一共3个),但Python却提示你传了3个参数而方法只接受2个。这大概率是模块缓存或者代码未保存的问题,下面是具体的排查和解决步骤:

可能的原因及解决方法

1. 代码未保存或加载的是旧版本的类

这是最常见的原因:你修改了Player.py里的__init__方法,但没有保存文件,或者你的Python解释器还在使用之前缓存的旧版本类(比如旧版本的__init__只有self一个参数)。

解决步骤:

  • 关闭当前运行Python的终端/IDE,重新打开。
  • 确认Player.py的代码确实保存为你贴出来的版本,尤其是__init__方法的参数部分:
    class Player(object):
        def __init__(self, Pos, Stack):
            self.Pos = Pos
            self.Stack = Stack
        def cstack(self, change):
            self.Stack += change
    

2. Python模块缓存问题

Python会缓存已经导入的模块,避免重复加载。如果你之前运行过旧版本的Player类,即使修改了文件,当前的解释器会话可能还是会用旧的版本。

解决方法:
如果是在交互式环境(比如IPython或者Python shell)里,可以重新加载模块:

  • Python 3:
    from Player import Player
    import importlib
    importlib.reload(Player)  # 重新加载模块
    Player1 = Player(0, 500)  # 现在应该可以正常创建实例了
    
  • Python 2:
    from Player import Player
    reload(Player)
    Player1 = Player(0, 500)
    

3. 检查是否有同名模块干扰

确保你的项目文件夹里只有一个Player.py文件,没有其他同名的文件(比如player.py,注意Python在Windows下文件名不区分大小写,但在Linux/macOS下区分,可能导致导入错误的文件)。同时确认Go.py和Player.py在同一个目录下,或者Player.py在Python的搜索路径里。

验证方法

你可以在Go.py里添加一行代码,打印Player类的__init__方法,确认它的参数是否正确:

from Player import Player
print(Player.__init__)

如果输出显示类似<function Player.__init__ at 0x...>,并且函数签名包含__init__(self, Pos, Stack),那说明导入的是正确的类,此时再创建实例就不会报错了。

内容的提问来源于stack exchange,提问作者Federico Davide

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:32:19