¿Por qué la clase de estilo nueva y la clase de estilo antiguo tienen un comportamiento diferente en este caso?
Encontré algo interesante, aquí hay un fragmento de código:
class A(object):
def __init__(self):
print "A init"
def __del__(self):
print "A del"
class B(object):
a = A()
Si ejecuto este código, obtendré:
A init
Pero si cambioclass B(object)
aclass B()
, Obtendré:
A init
A del
Encontré una nota en el__del__ doc:
No se garantiza quedel() se llaman métodos para objetos que todavía existen cuando el intérprete sale.
Entonces, supongo que es porque esoB.a
todavía está referenciado (referenciado por claseB
) cuando existe el intérprete.
Entonces, agregué undel B
antes de que el intérprete exista manualmente, y luego encontréa.__del__()
fue llamado.
Ahora, estoy un poco confundido acerca de eso. Por que esa.__del__()
llamado cuando se usa la clase de estilo antiguo? ¿Por qué las clases de estilo nuevo y antiguo tienen un comportamiento diferente?
Encontré una pregunta similaraquí, pero creo que las respuestas no son lo suficientemente claras.