Я нашел что-то интересное, вот фрагмент кода:
class A(object):
def __init__(self):
print "A init"
def __del__(self):
print "A del"
class B(object):
a = A()
Если я запустил этот код, я получу:
A init
Но если я изменю class B(object)
на class B()
, я получу:
A init
A del
Я нашел примечание в __ del__ doc:
Не гарантируется, что для объектов вызываются del() которые все еще существуют, когда переводчик завершает работу.
Тогда, я думаю, это потому, что B.a
по-прежнему ссылается (ссылка на класс B
), когда существует интерпретатор.
Итак, я добавил del B
до того, как интерпретатор существует вручную, а затем я нашел a.__del__()
.
Теперь я немного смущен. Почему a.__del__()
вызывается при использовании класса старого стиля? Почему классы нового и старого стиля имеют другое поведение?
Я нашел аналогичный вопрос здесь, но я думаю, что ответы недостаточно ясны.