@robick231

Почему в __init__ не меняется переменная?

Почему не меняется переменная is_alive?

class Warrior:
    def __init__(self, health=50, attack=5):
        self.health = health
        self.attack = attack
        #
        self.is_alive = True
        if self.health <= 0:
            self.is_alive = False 
at = Warrior()
at.health = 0
print(at.health, at.is_alive)
>>> 0, True
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
@mrxor
Simple is better than complex
В вашем коде проверка здоровья изменение is_alive происходит в методе __init__ -> __init__ вызывается только один раз при создании объекта. Следовательно после того, как вы создали объект вызвав at = Warrior() проверка уже не будет вызвана. Сделайте отдельный метод для уменьшения здоровья и в нем же добавьте переключение is_alive в False при его падении до нуля.
При этом, если вы вызовете at = Warrior(health=0) - ваша проверка сработает и Warrior породится мертвым, как бы грустно это ни было.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Zolg
ну так 50 ведь больше 0, потому и True
а вы какого результата ожидали ?

def __init__(self, health=50, attack=5):
...
if self.health > 0:
self.is_alive = True
..
Ответ написан
@Andy_U
Потому что __init__ уже был вызван. И второй раз - нет. Нужный вам эффект можно достигнуть использованием, например, property.

P.S. Ну и вообще нехорошо напрямую члены класса использовать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы