Есть ли способ, которым деструктор класса не вызывается, когда процесс завершен в python? - PullRequest
1 голос
/ 07 ноября 2019

Я хочу знать, что destrucor (__del__) не вызывается после завершения программы.

Как настроить __del__?

Например,

class destruct:
    def __init__(self, name):
        self.name = name
        print(f"(initializing {self.name}...)")

    def __del__(self):
        print(f"(Destroying {self.name} ...)")


test1 = destruct('a')
test2 = destruct('b')

результат этого кода:

(initializing a...)
(initializing b...)
(Destroying a ...)  <- I don't want to printing this message
(Destroying b ...)  <- I don't want to printing this message

Ответы [ 2 ]

3 голосов
/ 07 ноября 2019

Вся точка __del__ должна вызываться всякий раз, когда объект удаляется.

С C-Python объекты удаляются, если их счетчик ссылок равен 0, что обычно находится в конце области функцийили также, когда программа закончила.

Если вы не хотите, чтобы это поведение, то не используйте __del__, но реализуйте какой-то другой явный механизм.

Мы могли бы посоветовать, если вы дадите больше подробностейо вашем точном контексте.

0 голосов
/ 07 ноября 2019

методы, подобные этому должны всегда вызываться средой выполнения Python в соответствующее время. Есть несколько раз, если / когда этого не произойдет:

  • машина выключена! Всегда полезно помнить, что если вы пишете код, который касается таких ресурсов, как диск или сеть
  • , процесс резко прерывается. например, kill -9 pid в Unix или «принудительное завершение» в Windows
  • вмешивается отладчик или другой собственный код
  • какой-то другой код «обезьяна» исправляет »ваш класс / объект, чтобы сделать что-то еще

возможно, есть и другие способы

...