Uvod v Destructor v Pythonu
Konstruktorji in Destruktorji so dva pomembna koncepta pythona. Konstruktorji se imenujejo, ko je predmet razreda ustvarjen. Vendar se Destruktorji pokličejo, ko je predmet razreda uničen. Torej, ni narobe reči, Konstruktorji, so nasprotni od Destruktorjev. Del tega jezika je tudi Python, ki je objektno orientiran programski jezik, Konstruktorji in Destruktorji.
Destruktorji se v pythonu ne uporabljajo toliko kot Java in C ++. Toda če vemo, to je še bolj močna osnova v pythonu.
Destruktorji se lahko izkažejo za zelo koristne, ko gre za varno delo programa. Na primer: sprostitev uporabljenih virov pred izhodom iz programa, kot je sproščanje spominov, zapiranje datotek itd.
Ključna beseda, ki se uporablja za določitev Destruktorja, je: ključna beseda __del __ ():
Sintaksa:
def __del__(self):
#destructor body
Kot lahko vidimo, je __del__ ključna beseda, ki se uporablja za določanje destruktorja. Ko ga pokličemo, se izbriše vsa sklicevanja na ta objekt, ki je znan tudi kot zbiranje smeti.
Primeri Destruktorja v Pythonu
Za boljše razumevanje si oglejmo različne primere destruktorja v pythonu:
Primer # 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
Izhod:
"Trgovina z živili" je razred, ki je določen s svojimi posebnimi metodami: konstruktor in destruktor.
Torej je mogoče enkrat videti objekt razreda "Grocery". Samodejno prikliče __init__, ki je konstruktor razreda. Ko pa se "del obj" izvede za izbris predmeta, se metoda destruktorja samodejno pokliče.
Primer # 2
class Text:
def __del__(self):
print "Text deleted"
a = Text()
del a
a = Text()
b = a
del b
del a
Izhod:
Besedilo je razred, "a" je referenca predmeta na razred. "B" lokalna kopija sklicevanja "a". Torej, ko je b izbrisan, se metoda ne pokliče, saj preprosto hrani lokalno kopijo.
Prednosti Destruktorja v Pythonu
Kot rečeno, destruktor se v pythonu ne uporablja toliko, kot se uporablja v Java, C ++. Vendar koncept ostaja enak. Tu je nekaj prednosti njegove uporabe v programih:
- Nepotrebni predmeti se samodejno izbrišejo. To sprosti pomnilniški prostor, ki je znan kot zbiranje smeti.
- Prednost je tudi v tem, da se samodejno prikliče.
Nekateri koraki, ki jih je treba paziti, pri uporabi destruktorja:
1. Python ne pozna zaporedja, po katerem bo uničenje predmetov varnejše, tako da se lahko krožno sklicujejo drug na drugega. Zaradi tega ljudje priporočajo, da po vsaki funkciji izrecno uporabite »close«. Če pride do izjem, postane upravljanje metode zapiranja težavno. Zato je uporaba destruktorjev boljša, upoštevajoč ciklične reference.
2. Ciklične reference, če se tega ne lotijo dobro, obstaja verjetnost puščajočih abstrakcij in slabe zasnove.
Najboljša stvar je: z viri naj se ravna s predmetom najnižje stopnje v razredu.
3. Ko nekdo resnično potrebuje ciklične reference na predmete v kompleksni kodi, Python zanjo ponudi dobro rešitev v obliki imena modula: šifref. To pomeni, da se referencu posredujejo šibke reference, kar na koncu pomaga pri izvajanju predpomnilnika in ne ohranja več živega predmeta. Ko velik predmet ni živ, to pomeni, da se pojavi v predpomnilniku.
Poglejmo ga skozi majhno kodo, da dobimo natančno razumevanje:
Koda:
import weakref
class C:
def method(self):
print("Hi!method called!")
c = C()
r = weakref.ref(c)
print(c)
print(r)
Izhod:
Kot je razvidno, je "r" šibek sklic na objekt "c".
Če naredimo metodo sklicevanja na "r", kot je c2 = r (). Potem morata biti "c" in "c2" enaka, ker se nanaša na isto. Glej spodnji primer:
V primeru izbrisa glavnega predmeta referenčni objekt izgubi obstoj. Glej spodnji primer:
Kot lahko opazimo, je tiskanje (r ()) rezultatov "Brez". V tem primeru:
gc.collect () bo rezultat 0.
4. __del__ se ne sme zamenjati z del in python. __del__ je posebna metoda razreda, ki je destruktor in "del" se uporablja za uničenje spremenljivke, definirane v okolju python-a. Obe sta dve popolnoma različni stvari.
Kot:
xx = 10
del xx
Zaključek
Potem ko smo preučili zgornjo vsebino, lahko rečemo, da so konstruktorji in uničevalci ključni del Pythona. Destruktor igra osrednjo vlogo pri upravljanju pomnilnika, kjer opravlja številne naloge čiščenja objektov, ki se uporabljajo pri programiranju. Ukvarjanje z majhnimi programi vam morda ne bo dalo dejanske slike za uporabo destruktorjev. Kljub temu pa se lahko ukvarjamo s programi na ravni proizvodnje ali s kakšnimi zapletenimi linijami kode, zato je pomembnost uničevalcev jasno razumljiva, saj postaja uporaba pomnilnika tam zelo pomembna. Upoštevanje ideje o ciklični referenci lahko pri delu z destruktorji absolutno privede do dobrega oblikovanja.
Priporočeni članki
To je vodnik za Destructor v Pythonu. Tukaj razpravljamo o sintaksi, prednostih, skupaj z različnimi primeri destruktorja pytona. Če želite izvedeti več, si oglejte tudi naslednje članke -
- Izvleček razreda Python
- Uredniki Pythona
- Izjava o prekinitvi Pythona
- Zamenjava Pythona
- Primeri zamenjave v PHP
- Izjava o prekinitvi v JavaScript
- Celoten vodnik za Destruktor v PHP s primeri