Destruidor em Python - Vários exemplos com suas vantagens

Índice:

Anonim

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 -

  1. Classe abstrata em Python
  2. Editores Python
  3. Instrução Python Break
  4. Trocando em Python
  5. Exemplos de troca no PHP
  6. Declaração de quebra em JavaScript
  7. Guia completo para destruidor em PHP com exemplos