Задать вопрос
@kostyakos52000
student

Как удалить экземпляр класса в классе в Python?

Возможно ли удалить его в указанном месте в коде?
class Hero:

    def __init__(self):
        self.name = input("name? ")
        self.health = 100

    def blast(self, enemy):
        damage = 55
        enemy.hurt(damage)

    def hurt(self, damage):
        self.health -= damage
        if self.health <= 0:
            # в этом месте экземпляр класса должен удаляться
            # (в данном примере должен удалиться экземпляр person2)
        else:
            print(self.name + ": you hurt me! i have %d health" % self.health)
person1 = Hero()
person2 = Hero()

person1.blast(person2)
person1.blast(person2)
  • Вопрос задан
  • 10194 просмотра
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 3
Как это - вы хотите из экземпляра класса удалить его же самого?
Задача решается добавлением property класса is_dead и проверкой этого состояния извне. По обнаружению этого факта можно, но только если оч хочется, сделать person2 = None - вот и удаление.
Ответ написан
Комментировать
@Andrey_Dolg
Поддержу человека выше. Вы должны обнулить счетчик ссылок на объект и видимо для этого нужен доступ к переменой person2 вне класса.
Ответ написан
Комментировать
@Forevka69
Создайте список в который будете добавлять указатели на обьекты
например:
all_objects = []
person1 = Hero()
person2 = Hero()
all_objects.append(person1)
all_objects.append(person2)
и потом просто проходитесь циклом по этому списку и проверяйте значения health обьекта, если меньше ноля удаляйте
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽