Introdução ao Destructor em Python
Construtores e Destrutores são dois conceitos importantes em python. Os construtores são chamados quando o objeto de uma classe é criado. No entanto, os destruidores são chamados quando o objeto de uma classe é destruído. Portanto, não é errado dizer, construtores, são o oposto de destruidores. Python, sendo uma linguagem de programação orientada a objetos, Construtores e Destrutores também fazem parte dessa linguagem.
Os destruidores não são usados tanto em python quanto em Java e C ++. Mas saber que faz uma base ainda mais forte em python.
Os destruidores podem ser muito úteis quando se trata do trabalho de sanidade do programa. Por exemplo: liberando os recursos usados antes de sair do programa, como liberar memórias, fechar arquivos etc.
A palavra-chave usada para definir o Destructor é: __del __ ()
Sintaxe:
def __del__(self):
#destructor body
Como se pode ver, __del__ é a palavra-chave usada para definir destruidor. Quando é chamado, todas as referências a esse objeto são excluídas, também conhecidas como coleta de lixo.
Exemplos de destruidor em Python
Vamos ver exemplos diferentes de destruidor em python, para entender melhor:
Exemplo 1
class Grocery:
# Initializing
def __init__(self):
print('Grocery created.')
# Deleting (Calling destructor)
def __del__(self):
print('Destructor called, Grocery deleted.')
obj = Grocery()
del obj
Resultado:
"Mercearia" é a classe definida com seus métodos especiais: construtor e destruidor.
Assim, pode-se ver uma vez que o objeto da classe "Mercearia" é criado. Invoca automaticamente __init__, que é o construtor da classe. No entanto, quando "del obj" é executado para excluir um objeto, o método destruidor é chamado automaticamente.
Exemplo 2
class Text:
def __del__(self):
print "Text deleted"
a = Text()
del a
a = Text()
b = a
del b
del a
Resultado:
O texto é uma classe, "a" é uma referência de objeto à classe. Cópia local "b" dessa referência "a". Portanto, quando b é excluído, o método não é chamado, pois simplesmente mantém a cópia local.
Vantagens do destruidor em Python
Como dito anteriormente, o destruidor não é tão usado em python quanto em Java, C ++. No entanto, o conceito permanece o mesmo. Aqui estão algumas vantagens de usá-lo em programas:
- Objetos desnecessários são excluídos automaticamente. Isso libera o espaço de memória conhecido como coleta de lixo.
- A vantagem também reside no fato de invocar automaticamente.
Certas etapas que devem ser tomadas ao usar o destruidor:
1. O Python não sabe a ordem na qual os objetos destrutivos serão mais seguros que podem conter referências circulares entre si. Por esse motivo, as pessoas recomendam o uso de "fechar" explicitamente após cada função. Porém, no caso de exceções, gerenciar o método close fica problemático. Portanto, usar destruidores é melhor, tendo em mente as referências cíclicas.
2. Referências cíclicas, se não forem bem tratadas, as chances são de abstrações com vazamentos, além de um design ruim.
A melhor coisa é: os recursos devem ser manipulados pelo objeto de nível mais baixo da classe.
3. Quando alguém está precisando urgentemente de usar referências cíclicas para objetos em código complexo, o Python fornece uma boa solução para ele na forma do nome do módulo: weakref. Isso significa que referências fracas são fornecidas ao referente, o que ajuda na implementação do cache e não mantém mais o objeto grande ativo. Quando um objeto grande não está ativo, isso significa que ele aparece no cache.
Vamos ver isso através de um pequeno código para obter uma compreensão lúcida:
Código:
import weakref
class C:
def method(self):
print("Hi!method called!")
c = C()
r = weakref.ref(c)
print(c)
print(r)
Resultado:
Como se pode ver, "r" é uma referência fraca ao objeto "c".
Se fizermos uma referência de método para "r" como c2 = r (). Então "c" e "c2" devem ser os mesmos, porque se refere ao mesmo. Veja o exemplo mostrado abaixo:
No caso da exclusão do objeto principal, o objeto de referência perde sua existência. Veja o exemplo mostrado abaixo:
Como se pode notar, os resultados de impressão (r ()) são "Nenhum". Nesse caso:
gc.collect () resultará em 0.
4. __del__ não deve ser confundido com del em python. __del__ é um método especial de uma classe que é destruidora e "del" é usado para destruir uma variável definida no ambiente python. Ambos são duas coisas completamente diferentes.
Gostar:
xx = 10
del xx
Conclusão
Após analisar o conteúdo acima, podemos dizer que construtores e destruidores são uma parte crucial do Python. O destruidor desempenha um papel fundamental no gerenciamento da memória, onde realiza muitas tarefas de limpeza em objetos usados na programação. Lidar com pequenos programas pode não lhe dar a imagem real do uso de destruidores. No entanto, ao lidar com programas em nível de produção ou qualquer linha complexa de código, a importância dos destruidores pode ser entendida claramente, pois o uso da memória se torna muito importante lá. Tendo em mente a idéia de referência cíclica, pode absolutamente levar a um bom design ao trabalhar com destruidores.
Artigos recomendados
Este é um guia para o Destructor em Python. Aqui discutimos a sintaxe, as vantagens e os diferentes exemplos de destruidor de python. Você também pode consultar os seguintes artigos para saber mais -
- Classe abstrata em Python
- Editores Python
- Instrução Python Break
- Trocando em Python
- Exemplos de troca no PHP
- Declaração de quebra em JavaScript
- Guia completo para destruidor em PHP com exemplos