Почему мне пишет что принято 5 параметров, если я принимаю и отсылаю только 4?

TypeError: fight() takes 4 positional arguments but 5 were given

Непонимаю откуда Python взял 5 параметров, может кто-нибудь подсказать?

import random

class Warrior:
    health=0
    damage=0
    def __init__(self,health,damage):
        self.health=health
        self.damage=damage
    def fight(health1,damage1,health2,damage2):
        while (health1<=0) or (health2<=0):
            hod=random.random(1,2)
            if hod   ==   2:
                health1=health1-damage2
            if hod   ==   1:
                health2=health2-damage1

        if health1<=0:
            return 'Secondary Warrior win'
        else:
            return 'First Warrior win'

warrior1=Warrior(100,20)
warrior2=Warrior(100,20)
warrior=Warrior(0,0)

warrior.fight( warrior1.health,
               warrior1.damage,
               warrior2.health,
               warrior2.damage)

Ответы (1 шт):

Автор решения: CrazyElf
warrior=Warrior(0,0)
warrior.fight(...)

Вы вызываете метод fight у экземпляра класса Warrior, а значит методу fight кроме переданных вами аргументов передаётся ещё первым аргументом ссылка на экземпляр класса, который обычно называют self. Так что вам нужно поменять описание метода:

def fight(self, health1,damage1,health2,damage2):
          ^^^^

Либо, если вам не нужны никакие поля экземпляра класса, то нужно вызывать метод fight у класса, а не у экземпляра:

Warrior.fight(...)
^ с большой буквы - имя класса, а не экземпляра
→ Ссылка