Какие взаимосвязи между методами существуют внутри класса?

Как можно улучшить код, чтобы метод `udar` в классе `Fighter` правильно взаимодействовал с атрибутами и корректно выдавал информацию о количестве здоровья после удара?
  • 21 июня 2024 г. 9:21
Ответы на вопрос 2
Для улучшения работы метода `udar` в классе `Fighter` можно внести следующие изменения:

1. Добавить атрибут `health` с начальным количеством здоровья у бойца.
2. В методе `udar` уменьшать количество здоровья бойца на величину, переданную в параметрах метода.
3. Добавить проверку на то, что количество здоровья бойца после удара не должно быть отрицательным.
4. Возвращать информацию о текущем количестве здоровья после удара.

Примерно так можно реализовать улучшенный метод `udar` в классе `Fighter`:

```python
class Fighter:
    def __init__(self, name, health):
        self.name = name
        self.health = health

    def udar(self, damage):
        self.health -= damage
        if self.health < 0:
            self.health = 0
        return f"{self.name} здоровье после удара: {self.health}"
``` 

Этот код позволит корректно управлять здоровьем бойца в методе `udar` и выводить актуальную информацию о его состоянии после удара.
далее создал 2 бойца (боец 1 и боец 2) и присвоил им класс fighter

Ты создал два экземпляра класса fighter (в python принято давать имена классам с заглавной буквы) fighter-> Fighter.

далее я бойцом 1 применил метод удар на бойца 2
Это тебе так захотелось, в описании метода класса 'udar' об этом нет слова. Твой класс умеет бить только собственный экземпляр (себя может стукнуть, других бить не может).

Нужно передавать экземпляр другого класса, в общем измененная версия "твоего кода"
class fighter:
    def __init__(self,name=None,hp=None,dmg=None,):
        self.name = name
        self.hp = hp
        self.dmg = dmg


    # def udar(self,hp,dmg):
    #     print("Наносит урон с руки")
    #     rep = self.hp - self.dmg
    #     return "Осталось здоровья: " + rep

    def udar(self,other):
        print(self.name + " наносит урон с руки")
        rep = other.hp - other.dmg
        return "У " + other.name + " осталось здоровья: " + str(rep)
boec = fighter("вася",200,22)
boec2 = fighter("bob",100,19)
boec.udar(boec2)
Похожие вопросы