Семантика оператора del
на самом деле не поддается тому, что вы хотите здесь. del b
simple удаляет ссылку на объект A
, который вы только что создали, из рамки / словаря локальной области видимости; это напрямую не приводит к выполнению каких-либо операций над самим объектом. Если это была последняя ссылка на объект, то счетчик ссылок, упавший до нуля, или сборщик мусора, собирающий цикл, может привести к освобождению объекта. Вы можете наблюдать это, добавив к объекту метод __del__
или добавив обратный вызов слабый , который выполняет нужные действия.
Ни одно из последних двух решений не кажется отличной идеей; __del__
методы не позволяют сборщику мусора собирать циклы, связанные с объектом; и хотя слабые ссылки не страдают от этой проблемы, в любом случае вы можете работать в странной среде (например, во время завершения работы программы), что может затруднить выполнение того, чего вы хотите достичь.
Если вы можете расширить свой конкретный вариант использования, возможно, что существует совершенно другой подход к достижению желаемой конечной цели, но трудно предположить на основе такого общего и ограниченного примера.