Uvod u Destructor u Pythonu
Konstruktori i destruktori dva su važna koncepta pythona. Konstruktori se zovu kada se stvori objekt klase. Međutim, Destruktori se zovu kada se objekt klase uništi. Dakle, nije pogrešno reći, Konstruktori, su suprotnost Destruktorima. Python, budući da je objektno orijentirani programski jezik, Constructors i Destructors također su dio ovog jezika.
Destruktori se ne koriste u pythonu koliko Java i C ++. Ali ako se zna, to je još jača baza u pythonu.
Destruktori se mogu pokazati vrlo korisnim kada je u pitanju razuman rad programa. Na primjer: oslobađanje korištenih resursa prije izlaska iz programa poput oslobađanja memorija, zatvaranja datoteka itd.
Ključna riječ koja se koristi za definiranje Destruktora je: ključna riječ __del __ ():
Sintaksa:
def __del__(self):
#destructor body
Kao što se vidi, __del__ je ključna riječ koja se koristi za definiranje destruktora. Kad je pozvan, briše se sva referenca na taj objekt koja je također poznata kao sakupljanje smeća.
Primjeri Destruktora u Pythonu
Da vidimo bolje primjere destruktora u pythonu:
Primjer 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
Izlaz:
"Hrana" je klasa definirana posebnim metodama: konstruktor i destruktor.
Dakle, jednom se može stvoriti objekt klase "Trgovina". To automatski poziva __init__, koji je konstruktor klase. Međutim, kada se „del obj“ izvrši za brisanje objekta, metoda destruktora automatski se poziva.
Primjer 2
class Text:
def __del__(self):
print "Text deleted"
a = Text()
del a
a = Text()
b = a
del b
del a
Izlaz:
Tekst je klasa, "a" je referenca objekta na klasu. „B” lokalni primjerak reference „a”. Dakle, kad je b izbrisan, metoda se ne poziva, jer jednostavno sadrži lokalnu kopiju.
Prednosti Destruktora u Pythonu
Kao što je rečeno prije, destruktor se ne koristi toliko u python-u koliko se koristi u Java, C ++. Međutim, koncept ostaje isti. Evo nekoliko prednosti njegove upotrebe u programima:
- Nepotrebni se objekti automatski brišu. Time se oslobađa memorijski prostor koji je poznat kao Garbage collection.
- Prednost je i u tome što se automatski poziva.
Određeni koraci na koje treba paziti pri korištenju destruktora:
1. Python ne zna kako bi uništavanje objekata bilo sigurnije da se mogu kružno pozivati jedni na druge. Zbog toga ljudi preporučuju izričito korištenje funkcije "close" nakon svake funkcije. Ali u slučaju izuzetaka, upravljanje bliskom metodom postaje problematično. Stoga je bolje koristiti destruktore, imajući na umu cikličke reference.
2. Cikličke reference ako se ne dobivaju dobro, velike su šanse za apstrakcije, plus loš dizajn.
Najbolja stvar je: resursima treba rukovati objekt najniže razine klase.
3. Kad je nekome oštro potrebna uporaba cikličkih referenci na objekte u složenom kodu, Python nudi dobro rješenje za to u obliku naziva modula: šifref. To znači da se referentu daju slabe reference, što u konačnici pomaže u implementaciji predmemorije i više ne održava veliki objekt živim. Kada veliki objekt nije živ, to znači da se pojavljuje u predmemoriji.
Pogledajmo to kroz mali kôd da bismo razumjeli:
Kodirati:
import weakref
class C:
def method(self):
print("Hi!method called!")
c = C()
r = weakref.ref(c)
print(c)
print(r)
Izlaz:
Kao što se može vidjeti „r“ je slaba referenca na objekt „c“.
Ako napravimo metodu referencu na "r" kao što je c2 = r (). Tada bi "c" i "c2" trebali biti isti, jer se odnose na isto. Pogledajte primjer prikazan u nastavku:
U slučaju brisanja glavnog objekta, referentni objekt gubi postojanje. Pogledajte primjer prikazan u nastavku:
Kao što se može primijetiti, ispis (r ()) rezultata je "Nema". U tom slučaju:
gc.collect () rezultirat će 0.
4. __del__ ne treba brkati s del in python. __del__ je posebna metoda klase koja je destruktor i "del" se koristi za uništavanje varijable definirane u python okruženju. Oboje su dvije potpuno različite stvari.
Kao:
xx = 10
del xx
Zaključak
Nakon što prođemo kroz gornji sadržaj, možemo reći da su konstruktori i destruktori presudni dio Pythona. Destruktor ima središnju ulogu u upravljanju memorijom, gdje obavlja mnogo zadataka čišćenja na objektima koji se koriste u programiranju. Suočavanje s malim programima možda vam ne daje stvarnu sliku korištenja destruktora. Međutim, dok se bavimo programima na razini proizvodnje ili bilo kojim složenim linijama koda, važnost destruktora može se jasno shvatiti, jer upotreba memorije tamo postaje vrlo važna. Imajući na umu ideju cikličke reference može apsolutno dovesti do dobrog dizajna tijekom rada s destruktorima.
Preporučeni članci
Ovo je vodič Destruktora u Pythonu. Ovdje smo raspravljali o sintaksi, prednostima zajedno s različitim primjerima destruktora pytona. Možete pogledati i sljedeće članke da biste saznali više -
- Sažetak klase u Pythonu
- Urednici Pythona
- Izjava o prekidu Pythona
- Zamjena u Pythonu
- Primjeri zamjene u PHP-u
- Izjava o prekidu u JavaScript-u
- Kompletan vodič za Destruktor u PHP-u s primjerima