Introducere în distrugător în Python

Constructorii și distrugătorii sunt două concepte importante în piton. Constructorii sunt numiți atunci când este creat obiectul unei clase. Cu toate acestea, distrugătorii sunt numiți atunci când obiectul unei clase este distrus. Prin urmare, nu este greșit să spunem, Constructorii, sunt opusul Distrugătorilor. Python, fiind un limbaj de programare orientat pe obiecte, Constructori și Distrugători face parte și din acest limbaj.

Distrugătorii nu sunt folosiți în piton la fel de mult ca Java și C ++. Dar știind că face o bază și mai puternică în python.

Distrugătorii se pot dovedi foarte utili atunci când vine vorba de lucrarea de sănătate a programului. De exemplu: eliberarea resurselor utilizate înainte de a ieși din program, cum ar fi eliberarea de memorii, închiderea fișierelor etc.

Cuvântul cheie folosit pentru a defini Destructor este: __del __ () cuvânt cheie:

Sintaxă:

def __del__(self):
#destructor body

După cum se poate vedea, __del__ este cuvântul cheie folosit pentru a defini distrugătorul. Când este numit, toate referințele la obiectul respectiv sunt șterse, care este, de asemenea, cunoscut sub numele de colectarea gunoiului.

Exemple de distrugător în Python

Să vedem diferite exemple de distrugător în python, pentru a înțelege mai bine:

Exemplul # 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

ieşire:

„Grocery” este clasa definită cu metodele sale speciale: constructor & destructor.

Astfel, se poate vedea odată ce obiectul clasei „Grocery” este creat. Invocă automat __init__, care este constructorul clasei. Cu toate acestea, atunci când „del obj” este executat pentru a șterge un obiect, metoda distrugător este apelată automat.

Exemplul # 2

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

ieşire:

Textul este o clasă, „a” este obiectul referință la clasă. Copie locală „b” a acelei referințe „a”. Deci, atunci când b este șters, metoda nu este apelată, deoarece deține pur și simplu copia locală.

Avantajele distrugătorului în Python

Așa cum s-a spus anterior, distrugătorul nu este atât de utilizat în python, cât este folosit în Java, C ++. Cu toate acestea, conceptul rămâne același. Iată câteva avantaje ale utilizării în programe:

  • Obiectele inutile sunt șterse automat. Aceasta eliberează spațiul de memorie cunoscut sub numele de colectare gunoi.
  • Avantajul constă și în faptul că invocă automat.

Anumite etape de care trebuie să aveți grijă, folosind distrugătorul:

1. Python nu cunoaște ordinea în care obiectele distrugătoare vor fi mai sigure, care pot păstra referințe circulare unul la celălalt. Din această cauză, oamenii recomandă utilizarea „aproape” în mod explicit după fiecare funcție. Dar, în caz de excepții, apare metoda apropiată devine supărătoare. Prin urmare, folosirea distrugătorilor este mai bună, ținând cont de referințele ciclice.

2. Referințe ciclice, dacă nu sunt tratate bine, șansele sunt de abstractizări scăzute, plus un design rău.
Cel mai bun lucru este: resursele ar trebui să fie gestionate de obiectul de cel mai scăzut nivel al clasei.

3. Când cineva are mare nevoie să folosească referințe ciclice la obiecte în cod complex, Python oferă o soluție bună pentru el sub forma numelui modulului: weakref. Acest lucru înseamnă că referințele slabe sunt furnizate referentului, care ajută în cele din urmă la implementarea memoriei cache și nu mai păstrează obiectul mare viu. Când un obiect mare nu este viu, asta înseamnă că apare în cache.

Să o vedem printr-un cod mic pentru a obține înțelegere lucidă:

Cod:

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

ieşire:

După cum se poate vedea „r” este o referire slabă la obiectul „c”.

Dacă facem o metodă de referință la „r” precum c2 = r (). Atunci „c” și „c2” ar trebui să fie aceleași, deoarece se referă la același lucru. Vezi exemplul prezentat mai jos:

În cazul ștergerii obiectului principal, obiectul de referință își pierde existența. Vezi exemplul prezentat mai jos:

După cum se poate observa, rezultatele tipăririi (r ()) sunt „Niciuna”. În acest caz:
gc.collect () va rezulta în 0.

4. __del__ nu trebuie confundat cu del in python. __del__ este o metodă specială a unei clase care este distrugătoare și „del” este utilizată pentru a distruge o variabilă definită în mediul piton. Ambele sunt două lucruri complet diferite.

Ca:

xx = 10
del xx

Concluzie

După parcurgerea conținutului de mai sus, putem spune că constructorii și distrugătorii sunt o parte crucială a Python. Distrugătorul joacă un rol esențial în gestionarea memoriei, unde îndeplinește multe sarcini de curățare a obiectelor utilizate în programare. S-ar putea să vă descurcați cu programe mici, nu vă poate oferi imaginea reală din spatele folosirii distrugătorilor Cu toate acestea, în timp ce avem de-a face cu programe la nivel de producție sau orice linii complexe de cod, importanța distrugătorilor poate fi înțeleasă în mod clar, deoarece utilizarea memoriei devine foarte importantă acolo. Ținând cont de ideea de referință ciclică poate duce absolut la un design bun în timp ce lucrați cu distrugători.

Articole recomandate

Acesta este un ghid pentru Distrugătorul din Python. Aici discutăm sintaxa, avantajele împreună cu diferitele exemple de piton distrugător. De asemenea, puteți consulta următoarele articole pentru a afla mai multe -

  1. Clasă abstractă în Python
  2. Python Editors
  3. Declarație de pauză Python
  4. Schimbarea în Python
  5. Exemple de schimbare în PHP
  6. Declarație de pauză în JavaScript
  7. Ghid complet pentru distrugător în PHP cu exemple