Por que a nova classe de estilo e a classe de estilo antigo têm comportamento diferente nesse caso?
Achei algo interessante, aqui está um trecho de código:
class A(object):
def __init__(self):
print "A init"
def __del__(self):
print "A del"
class B(object):
a = A()
Se eu executar esse código, obterá:
A init
Mas se eu mudarclass B(object)
paraclass B()
, Eu receberei:
A init
A del
Encontrei uma nota no__del__ doc:
Não é garantido quedel() são chamados para objetos que ainda existem quando o intérprete sai.
Então, acho que é porqueB.a
ainda é referenciado (referenciado pela classeB
) quando o intérprete existe.
Então, eu adicionei umdel B
antes que o intérprete exista manualmente, e então eu acheia.__del__()
foi chamado.
Agora, estou um pouco confuso sobre isso. Porque éa.__del__()
chamado ao usar a classe de estilo antigo? Por que as classes de estilo novo e antigo têm comportamento diferente?
Encontrei uma pergunta semelhanteaqui, mas acho que as respostas não são claras o suficiente.