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 Person
e 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 = None
Linguagem de código: Python ( python )
Saída:
__del__ was called
Linguagem de código: Python ( python )
Quando definimos o person
objeto 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 del
palavra-chave para excluir o person
objeto, o __del__
método também será chamado:
person = Person('John Doe', 23)
del person
Linguagem de código: Python ( python )
Saída:
__del__ was called
Linguagem de código: Python ( python )
Entretanto, a del
instruçã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.