Sahoory
Sahoory

Reputation: 101

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

hi im getting this error

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

and this is my code

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()

i checked and looked most places says i forgot the self in the def attack or that i need to make an obj to put the class in im useing python 3.4 with py charm i actually got this code from a tutorial and i dont know what is my mistake

Upvotes: 4

Views: 21363

Answers (2)

khelwood
khelwood

Reputation: 59146

You're not instantiating your Enemy class. You are creating a new reference to the class itself. Then when you try and call a method, you are calling it without an instance, which is supposed to go into the self parameter of attack().

Change

enemy = Enemy

to

enemy = Enemy()

Also (as pointed out in by Kevin in the comments) your Enemy class should probably have an init method to initialise its fields. E.g.

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

Upvotes: 6

Stefan Pochmann
Stefan Pochmann

Reputation: 28636

You need to create and use an instance of the class, not the class itself:

enemy = Enemmy()

That instance is then accessible as self. If you don't have an instance, then it's missing and that's what the error message tells you.

Upvotes: 3

Related Questions