【问题标题】:Python __init__(a,b,c,d) not recognizing "self" as argumentPython __init__(a,b,c,d) 未将“self”识别为参数
【发布时间】:2013-04-27 23:01:54
【问题描述】:

我正在制作一个愚蠢的小游戏来学习 Python,但在使用 init

创建地精生物时遇到了问题

这是通用生物类构造函数

class Creature(object):
    def __init__(self,str,dex,wis,n):

这是对它的调用:

goblin = Creature(randint(1,2),randint(1,2),(randint(1,2),"Goblin"))

这是我遇到的错误

TypeError: __init__() takes exactly 5 arguments (4 given)

同样奇怪的是,我以几乎相同的方式创建 Player 生物,但没有错误

player = Player(str,dex,wis,name)

PlayerCreature 的子类

【问题讨论】:

  • 感谢大家的出色而及时的回答!

标签: python class init


【解决方案1】:

您已将第三个参数作为元组提供:

goblin = Creature(randint(1,2),randint(1,2),(randint(1,2),"Goblin"))

我假设你想要这个单独的,所以只需删除括号:

goblin = Creature(randint(1,2),randint(1,2),randint(1,2),"Goblin")

第五个参数是self,自动调用。

【讨论】:

    【解决方案2】:

    它与self 无关,你有四个参数并传递三个:

    randint(1,2),
    randint(1,2),
    (randint(1,2),"Goblin")
    

    【讨论】:

      【解决方案3】:

      Creature 构造函数的最后 2 个参数周围有括号。这被解释为一个元组(单个 arg)而不是 2 个单独的 args。

      【讨论】: