Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

В общем:

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

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

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

Ответ 2

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

del somemastermind.roaches[n]