170 похожих чатов

Буду признателен, если кто-то объяснит. Ибо не совсем понял почему

так происходит. Читаю книгу Укус Питона и там в разделе ООП есть следующее:

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 как бы должен в любом случае сработать. Но если я укажу где и когда, то они уничтожаться именно в этот момент, иначе скрипт сам посчитает нужным когда и где удалить.

3 ответов

14 просмотров

1. как ты это определил. если ты убрал явный del то объекты в твоем конкретном случае будут уничтожены по завершению скрипта (но не гарантированно вызван для них __del__> 2. del droid1 нихрена не "уничтожает". del удаляет ссылку на объект.

Ad1n1cA- Автор вопроса
Alex
1. как ты это определил. если ты убрал явный del т...

крч говоря, если я не прописываю del самостоятельно в нужном мне месте, этот метод в любом случае сработает по окончанию. Верно?

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

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта