Python__del__

Resumo : neste tutorial, você aprenderá sobre o __del__método especial Python e entenderá como ele funciona.

Introdução ao __del__método Python

Em Python, o coletor de lixo gerencia a memória automaticamente. O coletor de lixo destruirá os objetos que não são referenciados .

Se um objeto implementa o __del__método, o Python chama o __del__método logo antes do coletor de lixo destruir o objeto.

Entretanto, o coletor de lixo determina quando destruir o objeto. Portanto, determina quando o __del__método será chamado.

Às __del__vezes é chamado de finalizador de classe. Observe que __del__não é o destruidor porque o coletor de lixo destrói o objeto, não o __del__método.

As armadilhas do Python __del__

Python chama o __del__método quando todas as referências de objeto desaparecem. E você não pode controlá-lo na maioria dos casos.

Portanto, você não deve usar o __del__método para limpar os recursos. É recomendado usar o gerenciador de contexto.

Se __del__contiver referências a objetos, o coletor de lixo também destruirá esses objetos quando for __del__chamado.

Se __del__fizer referência aos objetos globais, poderá criar comportamentos inesperados.

Se ocorrer uma exceção dentro do __del__método, o Python não gera a exceção, mas a mantém silenciosa.

Além disso, o Python envia a mensagem de exceção para o stderr. Portanto, o programa principal poderá ficar atento às exceções durante a finalização.

Na prática, você raramente usará o __del__método.

Exemplo Python __del__

O seguinte define uma Person classe com o __del__método especial, cria uma nova instância de Persone define-a como None:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __del__(self):
        print('__del__ was called')


if __name__ == '__main__':
    person = Person('John Doe', 23)
    person = NoneLinguagem de código:  Python  ( python )

Saída:

__del__ was calledLinguagem de código:  Python  ( python )

Quando definimos o personobjeto como None, o coletor de lixo o destrói porque não há referência. Portanto, o __del__método foi chamado.

Se você usar a delpalavra-chave para excluir o personobjeto, o __del__método também será chamado:

person = Person('John Doe', 23)
del personLinguagem de código:  Python  ( python )

Saída:

__del__ was calledLinguagem de código:  Python  ( python )

Entretanto, a delinstrução não causa uma chamada ao __del__método se o objeto tiver uma referência.

Resumo

  • Python chama o __del__método logo antes do coletor de lixo destruir o objeto.
  • O coletor de lixo destrói um objeto quando não há referência ao objeto.
  • A exceção ocorre dentro do __del__método não é levantada, mas silenciosa.
  • Evite usar __del__recursos para limpeza; use o gerenciador de contexto.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *