Задать вопрос
@ruslashru

Почему у меня программа вообще не реагирует на свойства в python?

Я создал героя(villain) и злодея(heroe) и хотел, чтобы пользователь сам вводил количество хп и урон героя и злодея, и если хп и урон превышал 10000 или был меньше или равно нулю, то программа этого не давала сделать. Но ей почему-то всё равно,
она даёт ввести число меньше нуля, как-будто просто не видит свойство. Помогите пожалуйста я устал бороться и искать ошибку в своей программе.
class Heroes(object):
    def __init__(self):
        self.__hp = int(input('Введите количество здоровья героя: '))
        self.__damage = int(input('Введите количество урона героя: '))
    @property
    def hp(self):
        return self.__hp
    @hp.setter
    def hp(self, new_hp):
        if new_hp > 10000:
            print('Здоровье не может быть больше 10000')
        elif new_hp <= 0:
            print('Здоровье не может быть меньше или равно нулю')
        else:
            self.__hp = new_hp
            print('s')
    @property
    def damage(self):
        return self.__damage
    @damage.setter
    def damage(self, new_damage):
        if new_damage > 10000:
            print('Урон не может быть больше 10000')
        elif new_damage <= 0:
            print('Урон не может быть меньше или равно нулю')
        else:
            self.__damage = new_damage
            print('t')
class Villains(Heroes):
    def __init__(self):
        self.__hp = int(input('Введите количество здоровья злодея: '))
        self.__damage = int(input('Введите количество урона злодея: '))
heroe = Heroes()
villain = Villains()
  • Вопрос задан
  • 37 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
Daemon23RUS
@Daemon23RUS
class Heroes(object):
    def __init__(self):
        self.__hp = int(input('Введите количество здоровья героя: '))
        self.__damage = int(input('Введите количество урона героя: '))
она даёт ввести число меньше нуля, как-будто просто не видит свойство.

Я чет не вижу логики чтобы проверить и дать возможность повторить ввод, даже просто бросить исключение и закрыться. Вы создаете "объект" при создании он инициализируется путем взаимодействия с пользователем (консоль) что введете, то и будет, без проверок ...
Ответ написан
Комментировать
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
Разве IDE не подчёркивает вам проблемные места?

Вы не вызываете конструктор родительского класса:
class Villains(Heroes):
    def __init__(self):
        super().__init__()


И не очень понятно когда проблема проявляется, при инициализации переменных? Но вы не проверяете никак __hp и __damage. А там, где есть логика проверки, надо понимать что __damage != new_damage и __hp != new_hp.

После инициализации всё корректно, имхо, работает:
688e808ad1739508277546.png
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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