Метод __del__ вызывается в Python, когда он не ожидается
Я новичок в Python и работаю с примерами в Swaroop CH "Байт Питона ", Я вижу некоторое поведение с__del__
метод, который озадачивает меня.
В основном, если я запускаю следующий скрипт (в 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')
с помощью консоли Python (или интерактивной консоли Spyder) я вижу следующее:
ExecFile (U»C: \ 1_eric \ Python \ test1.py ')
Инициализация Swaroop
Инициализация Калем
ExecFile (U»C: \ 1_eric \ Python \ test1.py ')
Инициализация Swaroop
Swaroop говорит пока
Я последний
Инициализация Калем
Калем говорит пока
Я последний
Почему__del__
метод вызывается сразу после__init__
во второй раз?
Я предполагаю, что так как имена тех же экземпляров ('Swaroop» а также 'Калима») используются для освобождения исходного экземпляра и сбора мусора. Но, похоже, это наносит ущерб текущему количеству населения.
Что здесь происходит?
Что является хорошим способом избежать такого рода путаницы?
Избегайте использования__del__
? Проверить существующие имена экземпляров перед их повторным использованием? ...
Спасибо эрик