Почему мне пишет что принято 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(...)
^ с большой буквы - имя класса, а не экземпляра