Python: как "убить" экземпляр / объект класса?

Я хочу, чтобы класс Роуча "умер", когда он достигает определенного уровня "голода", но я не знаю, как удалить экземпляр. Возможно, я ошибаюсь в своей терминологии, но я хочу сказать, что у меня тонна "тараканов" в окне, и я хочу, чтобы конкретные исчезли полностью.

Я бы показал вам код, но он довольно длинный. У меня есть класс Роуч, добавляемый в список популяции плотвы классов Mastermind.

3 ответа

В общем:

  • Каждая переменная привязки -> объект увеличивает счетчик ссылок внутреннего объекта
  • Есть несколько обычных способов уменьшить ссылку (объект разыменования -> привязка переменной):

    1. выход из блока кода, в котором объявлена ​​переменная (используется впервые)
    2. разрушающий объект освободит ссылки на все атрибуты / переменную метода -> ссылки на объекты
    3. призвание del variable также удалит ссылку в текущем контексте
  • после удаления всех ссылок на один объект (counter==0) он становится хорошим кандидатом для сборки мусора, но не гарантируется, что он будет обработан ( ссылка здесь):

CPython в настоящее время использует схему подсчета ссылок с (опционально) отложенным обнаружением циклически связанного мусора, который собирает большинство объектов, как только они становятся недоступными, но не гарантирует сбор мусора, содержащего циклические ссылки. См. Документацию модуля gc для получения информации об управлении сборкой циклического мусора. Другие реализации действуют иначе, и CPython может измениться. Не полагайтесь на немедленное завершение объектов, когда они становятся недоступными (например, всегда закрывайте файлы).

Вы не можете принудительно удалить объект Python; он будет удален, когда ничто не ссылается на него (или когда он находится в цикле, называемом только элементами в цикле). Вы должны будете сказать своему "Главному разуму" стереть его ссылку.

del somemastermind.roaches[n]
for i,roach in enumerate(roachpopulation_list)
        if roach.hunger == 100
            del roachpopulation_list[i]
            break

Удалите экземпляр, удалив его из списка населения (содержащего все экземпляры плотвы).

Если ваши тараканы - это спрайты, созданные в Pygame, то простая команда.kill удалит экземпляр.

Другие вопросы по тегам