Distruttore in Python - Vari esempi con i suoi vantaggi

Sommario:

Anonim

Introduzione a Destructor in Python

Costruttori e distruttori sono due concetti importanti in Python. I costruttori vengono chiamati quando viene creato l'oggetto di una classe. Tuttavia, i distruttori vengono chiamati quando l'oggetto di una classe viene distrutto. Quindi, non è sbagliato dire che i costruttori sono l'opposto dei distruttori. Python, essendo un linguaggio di programmazione orientato agli oggetti, costruttori e distruttori fa anche parte di questo linguaggio.

I distruttori non sono usati in Python tanto quanto Java e C ++. Ma sapendo che rende una base ancora più forte in Python.

I distruttori possono essere dimostrati molto utili quando si tratta di sanità mentale del programma. Ad esempio: liberare le risorse utilizzate prima di uscire dal programma come liberare memorie, chiudere file, ecc.

La parola chiave utilizzata per definire il distruttore è: __del __ () parola chiave:

Sintassi:

def __del__(self):
#destructor body

Come si può vedere, __del__ è la parola chiave utilizzata per definire il distruttore. Quando viene chiamato, tutti i riferimenti a quell'oggetto vengono eliminati, noti anche come garbage collection.

Esempi di distruttore in Python

Vediamo diversi esempi di distruttore in Python, per capire meglio:

Esempio 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

Produzione:

"Drogheria" è la classe definita con i suoi metodi speciali: costruttore e distruttore.

Quindi, si può vedere una volta creato l'oggetto della classe "Drogheria". Richiama automaticamente __init__, che è il costruttore della classe. Tuttavia, quando "del obj" viene eseguito per eliminare un oggetto, il metodo distruttore viene chiamato automaticamente.

Esempio n. 2

class Text:
def __del__(self):
print "Text deleted"
a = Text()
del a
a = Text()
b = a
del b
del a

Produzione:

Il testo è una classe, "a" è un riferimento all'oggetto per la classe. "B" copia locale di quel riferimento "a". Quindi, quando b viene eliminato, il metodo non viene chiamato, poiché contiene semplicemente la copia locale.

Vantaggi di Destructor in Python

Come detto prima, il distruttore non è tanto usato in Python quanto in Java, C ++. Tuttavia, il concetto rimane lo stesso. Ecco alcuni vantaggi dell'utilizzo nei programmi:

  • Gli oggetti non necessari vengono eliminati automaticamente. Ciò libera lo spazio di memoria che è noto come Garbage Collection.
  • Il vantaggio sta anche nel fatto che invoca automaticamente.

Alcuni passaggi che dovrebbero essere presi in considerazione durante l'utilizzo del distruttore:

1. Python non conosce l'ordine in cui la distruzione degli oggetti sarà più sicura e può contenere riferimenti circolari tra loro. Per questo motivo, le persone raccomandano di usare "chiudi" esplicitamente dopo ogni funzione. Ma in caso di eccezioni, la gestione del metodo close diventa problematica. Quindi è meglio usare i distruttori, tenendo presente i riferimenti ciclici.

2. Riferimenti ciclici se non vengono gestiti bene, è probabile che si verifichino astrazioni che perdono, oltre a un design errato.
La cosa migliore è: le risorse dovrebbero essere gestite dall'oggetto di livello più basso della classe.

3. Quando qualcuno ha un disperato bisogno di usare riferimenti ciclici a oggetti in codice complesso, Python fornisce una buona soluzione sotto forma di nome del modulo: weakref. Ciò significa che al referente vengono forniti riferimenti deboli, che alla fine aiuta a implementare la cache e non mantiene più in vita l'oggetto di grandi dimensioni. Quando un oggetto di grandi dimensioni non è vivo, significa che appare nella cache.

Vediamolo attraverso un piccolo codice per ottenere una comprensione lucida:

Codice:

import weakref
class C:
def method(self):
print("Hi!method called!")
c = C()
r = weakref.ref(c)
print(c)
print(r)

Produzione:

Come si può vedere "r" è un debole riferimento all'oggetto "c".

Se facciamo un riferimento al metodo "r" come c2 = r (). Quindi “c” e “c2” dovrebbero essere gli stessi, perché si riferiscono allo stesso. Vedi l'esempio mostrato di seguito:

Nel caso della cancellazione dell'oggetto principale, l'oggetto di riferimento perde la sua esistenza. Vedi l'esempio mostrato di seguito:

Come si può notare, i risultati di stampa (r ()) sono "Nessuno". In quel caso:
gc.collect () si tradurrà in 0.

4. __del__ non deve essere confuso con del in python. __del__ è un metodo speciale di una classe che è distruttore e "del" è usato per distruggere una variabile definita nell'ambiente python. Entrambe sono due cose completamente diverse.

Piace:

xx = 10
del xx

Conclusione

Dopo aver esaminato il contenuto sopra, possiamo dire che costruttori e distruttori sono una parte cruciale di Python. Il distruttore svolge un ruolo fondamentale nella gestione della memoria, dove svolge molte attività di pulizia sugli oggetti utilizzati nella programmazione. Trattare con piccoli programmi, potrebbe non darti il ​​quadro reale dietro l'utilizzo di distruttori. Tuttavia, mentre si ha a che fare con programmi a livello di produzione o con qualsiasi riga di codice complessa, l'importanza dei distruttori può essere compresa chiaramente, in quanto l'uso della memoria diventa molto importante lì. Tenendo presente l'idea del riferimento ciclico può assolutamente portare a un buon design mentre si lavora con i distruttori.

Articoli consigliati

Questa è una guida a Destructor in Python. Qui discutiamo la sintassi, i vantaggi insieme ai diversi esempi di distruttore di pitone. Puoi anche consultare i seguenti articoli per saperne di più -

  1. Classe astratta in Python
  2. Redattori di Python
  3. Dichiarazione Python Break
  4. Scambiare in Python
  5. Esempi di scambio in PHP
  6. Dichiarazione di break in JavaScript
  7. Guida completa a Destructor in PHP con esempi