__del__-Methode wird in Python aufgerufen, wenn dies nicht erwartet wird
Ich bin neu in Python und habe die Beispiele in Swaroop CHs "A Byte of Python" durchgearbeitet. Ich sehe ein Verhalten mit dem__del__
Methode, die mich verwirrt.
Grundsätzlich, wenn ich das folgende Skript ausführe (in Python 2.6.2)
class Person4:
'''Represents a person'''
population = 0
def __init__(self, name):
'''Initialize the person's data'''
self.name = name
print 'Initializing %s'% self.name
#When the person is created they increase the population
Person4.population += 1
def __del__(self):
'''I am dying'''
print '%s says bye' % self.name
Person4.population -= 1
if Person4.population == 0:
print 'I am the last one'
else:
print 'There are still %d left' % Person4.population
swaroop = Person4('Swaroop')
kaleem = Person4('Kalem')
Wenn ich die Python-Konsole (oder die interaktive Spyder-Konsole) verwende, sehe ich Folgendes:
execfile (u'C: \ 1_eric \ Python \ test1.py ')
Initialisierung von Swaroop
Kalem wird initialisiert
execfile (u'C: \ 1_eric \ Python \ test1.py ')
Initialisierung von Swaroop
Swaroop sagt Tschüss
Ich bin der letzte
Kalem wird initialisiert
Kalem sagt Tschüss
Ich bin der letzte
Warum ist der__del__
Methode, die unmittelbar nach dem aufgerufen wird__init__
im zweiten Lauf?
Ich vermute, da die gleichen Instanznamen ('swaroop' und 'kaleem') verwendet werden, gibt es die ursprüngliche Instanz frei und sammelt sie als Müll. Dies scheint jedoch ein Chaos mit der aktuellen Bevölkerungszahl zu sein.
Was geht hier vor sich?
Was ist ein guter Weg, um diese Art von Verwirrung zu vermeiden?
Vermeiden Sie die Verwendung von__del__
? Überprüfen Sie, ob Instanznamen vorhanden sind, bevor Sie sie wiederverwenden. ...
Danke, Eric