так происходит. Читаю книгу Укус Питона и там в разделе ООП есть следующее:
class Robot:
population = 0
def __init__(self, name):
self.name = name
print(f'(Инициализация {self.name})')
Robot.population += 1
def __del__(self):
print(f'{self.name} уничтожается!')
Robot.population -= 1
if Robot.population == 0:
print('{self.name} был последним.')
else:
print(f'Осталось {Robot.population} работающих роботов.')
def sayHi(self):
print(f'Приветствую! Мои хозяева называют меня {self.name}.')
def howMany():
print(f'У нас {Robot.population} роботов.')
howMany = staticmethod(howMany)
droid1 = Robot('R2-D3111')
droid1.sayHi()
Robot.howMany()
droid2 = Robot('C-3PO')
droid2.sayHi()
Robot.howMany()
print("\nЗдесь роботы могут проделать какую-то работу.\n")
print("Роботы закончили свою работу. Давайте уничтожим их.")
del droid1
del droid2
Robot.howMany()
объясните пожалуйста, почему если убрать:
del droid1
del droid2
Robot.howMany()
то запустив код роботы уничтожаются после инициализации?
такое чувство, будто метод del как бы должен в любом случае сработать. Но если я укажу где и когда, то они уничтожаться именно в этот момент, иначе скрипт сам посчитает нужным когда и где удалить.
1. как ты это определил. если ты убрал явный del то объекты в твоем конкретном случае будут уничтожены по завершению скрипта (но не гарантированно вызван для них __del__> 2. del droid1 нихрена не "уничтожает". del удаляет ссылку на объект.
крч говоря, если я не прописываю del самостоятельно в нужном мне месте, этот метод в любом случае сработает по окончанию. Верно?
Обсуждают сегодня