类型错误:attack()缺少一个必需的位置参数:“self”。

4

嗨,我遇到了这个错误:


TypeError: attack() missing 1 required positional argument: 'self'

这是我的代码:

class Enemmy :
    life = 3
    self = ""
    def attack(self):
        print ("ouch!!!!")
        self.life -= 1

    def checkLife(self):
        if self.life <= 0 :
            print ("dead")
        else:
            print (self.life)

enemy=Enemmy
enemy.attack()

我检查了很多地方,大多数都说我在 def attack 中忘记了 self,或者需要创建一个对象来放置类。我使用的是Python 3.4和PyCharm。实际上,我从教程中得到了这段代码,但我不知道我的错误在哪里。


enemy=Enemmy -> enemy=Enemmy() - vaultah
这个回答解决了你的问题吗?TypeError: Missing 1 required positional argument: 'self' - Georgy
2个回答

6

你没有实例化Enemy类。你只是创建了一个指向该类本身的新引用。然后当你尝试调用方法时,你是在没有实例的情况下调用它,这应该放在attack()函数的self参数中。

改成

enemy = Enemy

to

enemy = Enemy()

同时(像Kevin在评论中指出的那样),你的Enemy类可能应该有一个init方法来初始化其字段。例如:

class Enemy:
    def __init__(self):
        self.life = 3
    ...

3
您需要创建和使用该类的实例,而不是直接使用类本身:
enemy = Enemmy()

那个实例可以通过self访问。如果你没有实例,那么它就不存在,这就是错误信息告诉你的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接