Задать вопрос

Специальный метод __del_ в Python3, не понимаю, когда она вызывается?

Вопрос такой у меня есть специальный метод __del__ внутри класса.
В книге A Byte of Python сказано,ссылка в книгу
страница 114-115.
__del__ запускается только тогда, когда объект перестаёт использоваться, заранее не известно когда это момент наступеть.
Вернемся на мою код, у меня после создания экземпляра сразу вызывается __del__
тоест
вот я создаю
droid1 = Robot('R2-D2')
droid1.sayHi()

После того сразу вызывается __del__

А если после droid1 создаем еще объект droid2 то тогда после droid1 сразу не вызывается __del__
droid1 = Robot('R2-D2')
droid1.sayHi()

droid2 = Robot('R2-D2')
droid2.sayHi()

а после droid2 вызывается __del__.

В книге написано, явно уничтожается объект
del droid1
del droid2

У меня все вызывается без уничтожения с помощю __del__ что не так или в порядке.
Я не понимаю.

Вот такой код.
class Robot:
	population = 0

	def __init__(self,name):
		self.name = name
		print('(Инициализация {0})'.format(self.name))
		Robot.population += 1

	def __del__(self):
		print('{0} Уничтожается!'.format(self.name))
		Robot.population -= 1

		if Robot.population == 0:
			print('{0} Был последним.'.format(self.name))
		else:
			print('Осталось {0:d} работающих роботов'.format(Robot.population))

	def sayHi(self):
		print('Приветствую! Мои хозяева называют меня {0}.'.format(self.name))

	def howMany():
		print('У нас {0:d} роботов.'.format(Robot.population))

	howMany = staticmethod(howMany)

droid1 = Robot('R2-D2')
droid1.sayHi()
droid1.howMany()
print()
droid2 = Robot('cp-120')
droid2.sayHi()
droid2.howMany()
  • Вопрос задан
  • 3008 просмотров
Подписаться 3 Оценить 1 комментарий
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Объекты удаляются если
  1. Их удалить явно с помощью del;
  2. Если на них нет ссылок в момент срабатывания сборщика мусора;
  3. В процессе освобождения памяти при завершении программы.

У вас как раз третий вариант. В первом случае программа заканчивается сразу после создания первого дроида, происходит очистка памяти, все объекты удаляются. Во-втором случае происходит то же самое после создания второго дроида.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы