Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 733
Sahoory Avatar asked Jan 09 '23 10:01

Sahoory


2 Answers

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
    ...
like image 145
khelwood Avatar answered Jan 14 '23 09:01

khelwood


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.

like image 34
Stefan Pochmann Avatar answered Jan 14 '23 09:01

Stefan Pochmann